stream流操作List工具类
2024-10-09 12:53:09
工作中操作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));
}
}
最新文章
- 一个简单oop的changeTab
- 函数图象(N=x+y*i)
- 怎样用好ZBrush 中的映射大师功能
- 自然语言12_Tokenizing Words and Sentences with NLTK
- 学习编写Windows Live Writer插件
- URL传参中不能带特殊的字符以及处理方案
- ARCGIS二维三维平移
- iOS延时执行的四种方法
- zendstudio -chinese
- 【iOS】MD5数据加密和网络安全
- Dora.Interception, 一个为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
- 浅谈扩展欧几里得算法(exgcd)
- 哈夫曼树【最优二叉树】【Huffman】
- Linux(CentOs 7)系统重装笔记(一)
- gulp项目和webpack项目在浏览器中查看的方式
- php 在服务器端开启错误日志记录方法
- Kafka Offset相关命令总结
- django drf 基础学习1
- 创建xml文件、解析xml文件
- RMQ算法区间最值
热门文章
- okhttputils【 Android 一个改善的okHttp封装库】使用(三)
- DotNetCore跨平台~Dapper的使用
- Virtual Box虚拟机Ubuntu18.X系统安装及Mysql基本开发配置
- 【转载】假设有以下代码 String s = “hello”; 阿里巴巴笔试题
- Springboot 系列(十三)使用邮件服务
- shared_ptr和动态数组
- RequireJS入门级_RequireJS能给我们带来什么帮助?
- 简述C#中IO的应用
- .NET Core:API文档
- React 16.x 新特性思维导图