У меня возникли проблемы с полным пониманием роли, которую выполняет combiner
в методе Streams reduce
.
Например, следующий код не компилируется:
int length = asList("str1", "str2").stream()
.reduce(0, (accumulatedInt, str) -> accumulatedInt + str.length());
Ошибка компиляции говорит: (аргумент mismatch; int не может быть преобразован в java.lang.String)
но этот код компилируется:
int length = asList("str1", "str2").stream()
.reduce(0, (accumulatedInt, str ) -> accumulatedInt + str.length(),
(accumulatedInt, accumulatedInt2) -> accumulatedInt + accumulatedInt2);
Я понимаю, что метод объединителя используется в параллельных потоках, поэтому в моем примере он объединяет два промежуточных накопленных ints.
Но я не понимаю, почему первый пример не компилируется без комбайнера или как объединитель решает преобразование строки в int, поскольку он просто складывает два ints.
Может ли кто-нибудь пролить свет на это?