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,我筛选了一些常用方法:
随机推荐
- python学习第九讲,python中的数据类型,字符串的使用与介绍
目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...
- 图像检索(2):均值聚类-构建BoF
在图像检索时,通常首先提取图像的局部特征,这些局部特征通常有很高的维度(例如,sift是128维),有很多的冗余信息,直接利用局部特征进行检索,效率和准确度上都不是很好.这就需要重新对提取到的局部特征 ...
- 详解TypScript数据类型转换
最近在用TypeScript(后面简称TS),发现TS虽然语法和C#差不多但是在很多地方还是不够高级(和C#相比),这里主要聚焦在数据类型强转上面,直接看下面案例吧 string转number 案例如 ...
- 命令行程序增加 GUI 外壳
Conmajia © 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 ...
- RAC(ReactiveCocoa)介绍(一)
最近在学习RAC,之前在iOS工作中,类之间的传值,无非是block.delegate代理.KVO和Notification等这几种方法.在RAC中,同样具备替代block.delegate代理.KV ...
- 第一册:lesson 113.
原文:Small changes. question:Who has got some small changes? Fares,please! Trafalgar Square,please. I' ...
- Java集合类源码解析:Vector
[学习笔记]转载 Java集合类源码解析:Vector 引言 之前的文章我们学习了一个集合类 ArrayList,今天讲它的一个兄弟 Vector.为什么说是它兄弟呢?因为从容器的构造来说,Vec ...
- oracle非正常退出后重启实例
sqlplus /nolog 回车 conn / as sysdba 回车 startup 回车(如果被告知已启动,应先执行 shutdown immediate 回车)
- webpack使用exclude
在进行项目打包的时候,当使用babel-loader进行js兼容时,不需要将node_modules模块下的所有js文件进行打包.
- Input 标签 安卓 与 IOS 出现圆角 显示
Input 标签 input[type="submit"],input[type="reset"],input[type="button"] ...