Я обнаружил следующее странное поведение потоков
позволяет исследовать следующий код:
int summaryAge = Person.getPersons().stream()
.parallel() //will return surprising result
.reduce(0, (intermediateResult, p) -> intermediateResult + p.age,
(ir1, ir2) -> ir1 + ir2);
Идея не выделяет никаких ошибок, но когда я запускаю приложение, я вижу следующую ошибку компиляции:
Error:java: Compilation failed: internal java compiler error
но когда я заменяю его с помощью Integer
следующим образом:
Integer summaryAge = Person.getPersons().stream()
.parallel() //will return surprising result
.reduce(0, (intermediateResult, p) -> intermediateResult + p.age,
(ir1, ir2) -> ir1 + ir2);
Он работает правильно.
модель:
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;
}
}
Это ошибка идеи или компилятора?