使用stream和parallelStream减少相同数据数组时的结果不同?

Jas*_*ter -4 java java-8

我在具有相同lambda表达式的相同数组上使用了reduce with stream和parallelStream,我期望相同的结果,但输出是不同的.但是,结果不同,我不知道为什么.

代码:

    System.out.println("Reduce me...");
    Integer[] arrx = {1,2,3,4};
    //        Reducing the Array

    Arrays
            .stream(arrx)
            .reduce((s1, s2) -> (int)Math.pow(s1,2) + (int)Math.pow(s2,2))
            .ifPresent(System.out::println);

    Arrays.asList(arrx)
            .parallelStream()
            .reduce((s1, s2) -> (int)Math.pow(s1,2) + (int)Math.pow(s2,2))
            .ifPresent(System.out::println);
Run Code Online (Sandbox Code Playgroud)

输出:

1172
650
Run Code Online (Sandbox Code Playgroud)

Mạn*_*yễn 7

您的reduce操作取决于数组元素的遭遇顺序.

parallelStream忽略顺序和你每次调用并行执行时间接收到的不同的值.