栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java的并行流parallelStream之结果被收集后排序分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java的并行流parallelStream之结果被收集后排序分析

一、先说结论

parallelStream在中间处理时都是并行的(这里不展开说明并行的实现),所以parallelStream中间处理的结果都是乱序的,但是在使用了Collect收集器后,parallelStream被收集的结果默认都是按照集合的原序列进行排序的。

二、实例测试 2.1、先上代码
    @Test
    public void myParallelTest() {

        List testList = Lists.newArrayList(1, 91, null, 8, 100, 78, 9, 68);

        testList.parallelStream()
                .map(m -> {
                    if (Objects.isNull(m)) {
                        return null;
                    }
                    return m + 1;
                })
                .forEach(f -> System.out.print(f + " "));
       
        System.out.println();
        System.out.println("-----------------");

        List collect = testList.parallelStream()
                .map(m -> {
                    if (Objects.isNull(m)) {
                        return null;
                    }
                    return m + 1;
                })
                .collect(Collectors.toList());

        collect.forEach(f -> System.out.print(f + " "));
    }
2.2、运行结果

2.3、说明

测试代码上定义一个Integer类型集合:
第一次使用parallelStream进行对集合遍历输出时发现中间处理的结果都是乱序的。
第二次使用parallelStream进行对集合经过map处理后,再通过collect进行收集,发现collect收集的结果的顺序和原集合的顺序是一样的。
这个测试结果可以证明开头结论的正确性。

三、parallelStream结果差异分析

问题其实很明朗,主导因素在collect收集器上。

todo collect源码分析
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号