我进行
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 getPersons() {
List 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
对于序列流,此代码始终返回73(72 1),但对于并行,它始终返回76(72 4 * 1). 4 – 流元素计数.
当我看到这个结果时,我认为并行流和序列流返回不同的结果是很奇怪的.
我在某个地方违约吗?
附:
对我来说73是预期的结果,但76 – 不是.