工作中操作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));
}
}

最新文章

  1. 一个简单oop的changeTab
  2. 函数图象(N=x+y*i)
  3. 怎样用好ZBrush 中的映射大师功能
  4. 自然语言12_Tokenizing Words and Sentences with NLTK
  5. 学习编写Windows Live Writer插件
  6. URL传参中不能带特殊的字符以及处理方案
  7. ARCGIS二维三维平移
  8. iOS延时执行的四种方法
  9. zendstudio -chinese
  10. 【iOS】MD5数据加密和网络安全
  11. Dora.Interception, 一个为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
  12. 浅谈扩展欧几里得算法(exgcd)
  13. 哈夫曼树【最优二叉树】【Huffman】
  14. Linux(CentOs 7)系统重装笔记(一)
  15. gulp项目和webpack项目在浏览器中查看的方式
  16. php 在服务器端开启错误日志记录方法
  17. Kafka Offset相关命令总结
  18. django drf 基础学习1
  19. 创建xml文件、解析xml文件
  20. RMQ算法区间最值

热门文章

  1. okhttputils【 Android 一个改善的okHttp封装库】使用(三)
  2. DotNetCore跨平台~Dapper的使用
  3. Virtual Box虚拟机Ubuntu18.X系统安装及Mysql基本开发配置
  4. 【转载】假设有以下代码 String s = “hello”; 阿里巴巴笔试题
  5. Springboot 系列(十三)使用邮件服务
  6. shared_ptr和动态数组
  7. RequireJS入门级_RequireJS能给我们带来什么帮助?
  8. 简述C#中IO的应用
  9. .NET Core:API文档
  10. React 16.x 新特性思维导图