stream流操作List工具类
工作中操作List对于程序猿来说是"基本操作",为了更加便利,对JDK8的新特性stream流进行二次封装.话不多说,直接上代码
package com.mydemo;
import org.apache.commons.collections.CollectionUtils;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* JDK8 stream流操作工具类
* @author Jozz
*/
public class StreamUtils {
/**
* 映射
* @param data 不能为空
* @param fun
* @param <T>
* @param <R>
* @return data为空抛出异常IllegalArgumentException
*/
public static <T,R> List<R> map(List<T> data, Function<T,R> fun){
if (CollectionUtils.isEmpty(data)){
throw new IllegalArgumentException();
}
return data.stream().map(fun).collect(Collectors.toList());
}
/**
* 过滤
* @param data
* @param pre
* @param <T>
* @return data为空返回data
*/
public static <T> List<T> filter(List<T> data, Predicate<T> pre){
if (CollectionUtils.isEmpty(data)){
return data;
}
return data.stream().filter(pre).collect(Collectors.toList());
}
/**
* 排序
* @param data
* @param comparator
* @param <T>
* @return data为空返回data
*/
public static <T> List<T> sorted(List<T> data, Comparator<T> comparator){
if (CollectionUtils.isEmpty(data)){
return data;
}
return data.stream().sorted(comparator).collect(Collectors.toList());
}
/**
* 去重
* @param data
* @param <T>
* @return data为空返回data
*/
public static <T> List<T> distinct(List<T> data){
if (CollectionUtils.isEmpty(data)){
return data;
}
return data.stream().distinct().collect(Collectors.toList());
}
/**
* 判断是否包含匹配元素
* @param data
* @param pre
* @param <T>
* @return data为空返回false
*/
public static <T> boolean anyMatch(List<T> data, Predicate<T> pre){
if (CollectionUtils.isEmpty(data)){
return false;
}
return data.parallelStream().anyMatch(pre);
}
/**
* 将list进行join操作
* @param data
* @param join
* @return 返回join之后的字符串,data为空返回null
*/
public static String join(List<String> data,String join){
if (CollectionUtils.isEmpty(data)){
return null;
}
return data.stream().collect(Collectors.joining(join == null ? "" : join));
}
}
stream流操作List工具类的更多相关文章
- 还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下
Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda ...
- 超强的Lambda Stream流操作
原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
- java中文件操作的工具类
代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...
- IO流之FileUtils工具类的使用
IO流之FileUtils工具类的使用: 使用apache的commons-io包下的FileUtils,我筛选了一些常用方法:
随机推荐
- WindowUtils【窗口工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 判断当前界面是横屏还是竖屏: 获取当前界面方向. 效果图 代码分析 isLandscape(Context context): ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——6.底盘里程计标
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(八)高阶拓展——1.miiboo机器人安卓手机APP开发
android要与ROS通讯,一种是基于rosbridge,另一种是基于rosjava库. 相关参考例子工程 rosbridge例子: https://github.com/hibernate2011 ...
- 在ASP.NET Core中构建路由的5种方法
原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...
- 《C#并发编程经典实例》学习笔记—2.2 返回完成的任务
问题: 如何实现一个具有异步签名的同步方法. 从异步接口或基类继承代码,但希望用同步方式实现方法. 解释一下所谓的异步接口和异步基类.例如如下代码 interface IMyAsyncInterfac ...
- OO第一单元作业小结
前言 第一单元的主题是表达式求导,第一次作业是只带有常数和幂函数的求导,第二次作业加入了正余弦函数,第三次作业又加入了表达式嵌套,难度逐渐提升.总体来说前两次作业还易于应对,而第三次作业做得相对有些艰 ...
- javascript函数调用中的方法调用模式
最近想起来之前看过的一种js语法,感觉很实用,但是又想不起来具体的写法.然后在网上浏览了一段时间,终于成功的再现了记忆中的那种语法,嗯~,还是那个熟悉的味道! 代码如下: <script> ...
- git创建分支并提交到远程分支
来自:https://www.cnblogs.com/bluestorm/p/6252900.html 侵删 git branch(分支命令的使用http://hbiao68.iteye.com/bl ...
- Django常见问题
1.什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出. 中间件一般做认证或批量请求处理,django中的中间 ...
- 七、Android动画
Android的动画可以分为三种:View动画.帧动画和属性动画,帧动画也属于View动画的一种,只不过它和平移.旋转等常见的View动画在表现形式上略有不同而已. 1.View动画 平移动画:Tra ...