在流约化方法中,对于总和,恒等式是否必须始终为 0,对于乘法,必须始终为 1?
我继续学习java 8。
我发现了一个有趣的行为:
让我们看看代码示例:
// identity value and accumulator and combiner
Integer summaryAge = Person.getPersons().stream()
//.parallel() //will return surprising result
.reduce(1,
(intermediateResult, p) -> intermediateResult + p.age,
(ir1, ir2) -> ir1 + ir2);
System.out.println(summaryAge);
和模型类:
public class Person {
String name;
Integer age;
///...
public static Collection<Person> getPersons() {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Vasya", 12));
persons.add(new Person("Petya", 32));
persons.add(new Person("Serj", 10));
persons.add(new Person("Onotole", 18));
return persons;
}
}
12+32+10+18 = 72
.对于顺序流,此代码始终返回,但对于并行,它始终返回哪个是(4 等于流元素计数)。73
72 + 1
76
72 + 4*1
当我看到这个结果时,我认为并行流和顺序流返回不同的结果很奇怪。
我是否在某个地方违反了合同?
附言
对我来说,73是预期结果,但76不是。