gpt4 book ai didi

java-8 - 使用 takeWhile 时 StreamEx 并行性是否应该起作用?

转载 作者:行者123 更新时间:2023-12-01 14:45:17 25 4
gpt4 key购买 nike

我有一个像这样创建的流:

StreamEx.generate(new MySupplier<List<Entity>>())
.flatMap(List::stream)
.map(Entity::getName)
.map(name -> ...)
.. // more stuff

我可以通过添加 parallel 将其更改为并行工作:

StreamEx.generate(new MySupplier<List<Entity>>())
.flatMap(List::stream)
.map(Entity::getName)
.map(name -> ...)
.parallel()
.. // more stuff

但我还想添加一个takeWhile 条件来使流停止:

StreamEx.generate(new MySupplier<List<Entity>>())
.takeWhile(not(List::isEmpty))
.flatMap(List::stream)
.map(Entity::getName)
.map(name -> ...)
.parallel()
.. // more stuff

但是一旦我添加了 takeWhile,流似乎就变成了顺序的(至少它只由一个线程处理)。根据javadoc takeWhile 的,如果我理解正确的话,应该使用并行流。是我做错了什么还是设计有误?

最佳答案

与普通的 Stream API 一样,如果某些东西并行工作,并不意味着它可以高效工作。 javadoc 指出:

While this operation is quite cheap for sequential stream, it can be quite expensive on parallel pipelines.

实际上你想使用无序流的takeWhile可以特别优化,但目前没有优化,所以这可以被认为是一个缺陷。我会尝试解决这个问题(我是 StreamEx 的作者)。

更新:在0.6.5版本修复

关于java-8 - 使用 takeWhile 时 StreamEx 并行性是否应该起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41651101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com