Java 8 使用takeWhile时,StreamEx并行是否应该工作?

Java 8 使用takeWhile时,StreamEx并行是否应该工作?,java-8,java-stream,streamex,Java 8,Java Stream,Streamex,我创建了一个流,如下所示: StreamEx.generate(new MySupplier<List<Entity>>()) .flatMap(List::stream) .map(Entity::getName) .map(name -> ...) .. // more stuff 但我还想添加一个takeWhile条件,使流停止: StreamEx.generate(new MySupplier

我创建了一个流,如下所示:

StreamEx.generate(new MySupplier<List<Entity>>())
        .flatMap(List::stream)
        .map(Entity::getName)
        .map(name -> ...)
        .. // more stuff
但我还想添加一个
takeWhile
条件,使流停止:

StreamEx.generate(new MySupplier<List<Entity>>())
        .takeWhile(not(List::isEmpty))
        .flatMap(List::stream)
        .map(Entity::getName)
        .map(name -> ...)
        .parallel()
        .. // more stuff
StreamEx.generate(新的MySupplier())
.takeWhile(不是(列表::isEmpty))
.flatMap(列表::流)
.map(实体::getName)
.map(名称->…)
.parallel()
.. // 更多的东西

但是当我添加
takeWhile
时,流似乎变得有序(至少它只由一个线程处理)。根据takeWhile的定义,如果我理解正确的话,它应该与并行流一起工作。我是做错了什么,还是按照设计做的?

就像在普通的流API中一样,如果某个东西并行工作,并不意味着它能高效工作。javadoc声明:

虽然这种操作对于顺序流来说非常便宜,但在并行管道上可能非常昂贵

实际上,您希望对无序流使用
takeWhile
,无序流可以进行专门优化,但当前未进行优化,因此这可能被视为缺陷。我将尝试解决这个问题(我是StreamEx的作者)


更新:在0.6.5版中修复

谢谢!我在问题追踪器上添加了一个问题:@Johan,在0.6.5版本中修复
StreamEx.generate(new MySupplier<List<Entity>>())
        .takeWhile(not(List::isEmpty))
        .flatMap(List::stream)
        .map(Entity::getName)
        .map(name -> ...)
        .parallel()
        .. // more stuff