JAVA8中Stream的使用
list常用操作
list分割
/**
* list分割
*
* @param pList 需要分割的数据
* @param splitSize 分割单个数组的条目数
* @return
*/
public static <T> List<List<T>> splitList(Collection<T> pList, int splitSize) {
if (pList == null || pList.isEmpty()) {
return Collections.emptyList();
}
//分割的页码数
int pageNum = (int) Math.ceil((pList.size() / (double) splitSize));
//获取分割后的集合
return Stream.iterate(0, n -> n + 1)
.limit(pageNum).parallel().map(a ->
pList.parallelStream().skip((long) a * splitSize)
.limit(splitSize).collect(Collectors.toList()))
.collect(Collectors.toList());
}
测试:
public static void main(String[] args) {
List<Integer> mList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
mList.add(i);
}
System.out.println(splitList(mList, 3));
}
输出日志:[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
1、Stream.iterate 创建流值第一个参数为起始值,第二个函数表达式
2、limit() 方法来限制自己生成的Stream大小
3、parallel() 转化为并行处理(数据量大的时候有用),parallelStream()同并行流处理,使用数据是乱序的,但是使用.collect(Collectors.toList())对顺序无影响,有中间操作排序例外:这篇文章有介绍:blog.csdn.net/u012364631/…
4、skip() 跳过stream中的前n个元素
注意:
1、获取分页数一定要向上取整,不然会丢失数据。
2、第一个limit要以页码数为准,否则太大会出现多余的空数组,太小会丢失数据