工作中操作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工具类的更多相关文章

  1. 还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下

    Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda ...

  2. 超强的Lambda Stream流操作

    原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...

  3. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  4. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  5. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  6. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  7. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  8. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

  9. IO流之FileUtils工具类的使用

    IO流之FileUtils工具类的使用: 使用apache的commons-io包下的FileUtils,我筛选了一些常用方法:

随机推荐

  1. LogUtil【实现自由的控制日志的打印的封装类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于控制项目开发和上线阶段日志的打印. 效果图 暂不需要. 代码分析 在LogUtil类中声明代表不同日志级别的常量值(VERB ...

  2. Golang之变量去哪儿

    目录 什么是逃逸分析 为什么要逃逸分析 逃逸分析是怎么完成的 逃逸分析实例 总结 参考资料 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的 ...

  3. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  4. cocos creator主程入门教程(九)—— 瓦片地图

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍瓦片地图,在开发模拟经营类游戏.SLG类游戏.RPG游戏,都会使用到瓦片地图.瓦片地图地面是通 ...

  5. js或jquery实现点击某个按钮或元素显示div,点击页面其他任何地方隐藏div

    点击某个元素显示div,点击页面其他任何地方隐藏div,可用javascript和jquery两种方法实现: 一:javascript实现方法技巧<script>//定义stopPropa ...

  6. MySQL InnoDB 存储引擎探秘

    在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中.从MySQL5.5.8开始,InnoDB成为其默认的存储引擎.InnoDB存储引擎支持事务.其设计目标主要是面向OLTP的应用, ...

  7. winform 跨线程访问问题

    一.问题描述 进行winform 开发我们在进行数据交换时避免不了使用多线程或异步方法,这样操作也将避免不了跨线程对控件进行操作(赋值.修改属性). 下面通过一个测试说明一下问题 点击一个按钮异步对t ...

  8. 002. https通信(CA证书认证 + 密钥商定 )

    服务端与客户端建立https通信的过程: 一.认证:客户端第一次访问服务端时,要求服务端证明自己可被信任 1.证书:由服务端申请.第三方CA颁发的,存放在服务端的证书: 证书包含:服务端的公钥.服务端 ...

  9. cesium 之地图显示坐标、比例尺、海拔高度效果篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  10. nginx常用场景

    1.浏览器缓存 server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_s ...