JAVA8中Stream的使用

210 阅读1分钟

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要以页码数为准,否则太大会出现多余的空数组,太小会丢失数据