java 8 reduce with parallelStream 和 stream

标签 java parallel-processing java-stream reduce

<分区>

我正在尝试理解 reduce 方法。如果我将 reduce 与 stream() 结合使用,我会得到 _ab,如果我将 reduce 与 parallelStream() 结合使用,我会得到 _a_b。无论我们使用 parallelStream 还是 stream,reduce 的输出不应该相同吗?

import java.util.*;
import java.util.stream.*;

class TestParallelStream{

    public static void main(String args[]){
        List<String> l = Arrays.asList("a","b","c","d");
        String join=l.stream()
                     .peek(TestParallelStream::sleepFor)    
                     .reduce("_",(a,b) -> a.concat(b));
        System.out.println(join);
    }

    public static void sleepFor(String w){
        System.out.println("inside thread:"+w);
        try{
            Thread.currentThread().sleep(5000);
        }catch(InterruptedException e){ }
    }
}

最佳答案

如果您传递了有效参数,就会是这样。阅读 Javadoc :

The identity value must be an identity for the accumulator function. This means that for all t, accumulator.apply(identity, t) is equal to t.

您传递的输入不是这种情况; "_".concat(t) 不等于 t。由于您传递了无效参数,因此该方法的行为未定义,并且允许该方法执行任何操作,包括 making demons shoot out of your nose .

虽然我怀疑您想要 .collect(joining("_")),但我很难说出您实际上想要的行为。不过,您实际上并没有告诉我们您想要的输出。

关于java 8 reduce with parallelStream 和 stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36947110/

相关文章:

java - 在 Servlet 中获取 JBoss HTTP 连接器端口

java.lang.NoSuchMethodError : com. opensymphony.xwork2.util.finder.UrlSet.includeClassesUrl 错误

python - 将 xargs 用于并行 Python 脚本

r - 新安装 doMPI 抛出 MPI_ERR_SPAWN 错误

Java 8 Streams Filter 惰性求值的意图

java - 如何对 Java 8 流进行单元测试?

java - Autodesk Forge 从转换后的 DWG 中获取 list 和元数据

java - 用 Java 写入文件

postgresql - 如何为 PostgreSQL 11 服务器设置后台 worker ?

java - 构造函数引用和调用构造函数的 lambda 表达式有什么区别?