【发布时间】:2020-03-26 09:31:00
【问题描述】:
我怀疑何时将所有流合并以获得结果? 如果我有员工类并且必须获得最高薪水的前 5 名员工 ID,我可以使用并行流,但它在内部如何工作?
以下是代码。它在内部如何运作?据我说,很明显这次在listA.parallelStream()创建了并行流,但是什么时候合并在一起?
List<Employee> listA = new ArrayList<Employee>();
listA.parallelStream()
.sorted(((e1,e2) -> e2.salary.compareTo(e1.salary)))
.filter(e1 -> e1.salary > 50000)
.limit(5)
.map(e -> e.eID)
.collect(Collectors.toList());
【问题讨论】:
-
它们在收集器中组合在一起,使用它的“组合器”。
-
当代码以声明方式编写时,实现会处理细节。你说“我希望这个列表被并行处理,最后应该收集一个结果”,而不关心“如何”。该实现负责同步这些线程以提取一个结果。换句话说,如果您需要了解它是如何工作的,请查看适用的实现代码或文档。
-
Collectors.toList有一个组合器可以添加到 Slaw 的评论中,例如(left, right) -> { left.addAll(right); return left; } -
@slaw 那么根据这个限制(5)和地图也在各个流中计算?
-
这能回答你的问题吗? How Java8's Collection.parallelStream works?
标签: java java-8 parallel-processing java-stream