В интерфейсе Stream<T> имеется метод перегрузки collect() со следующей сигнатурой:
<R> R collect(Supplier<R> supplier,
BiConsumer<R,? super T> accumulator,
BiConsumer<R,R> combiner)
Существует еще одна версия collect(Collector<? super T,A,R> collector), которая получает объект с тремя предыдущими функциями. Свойство интерфейса Collector, соответствующее combiner, имеет подпись BinaryOperator<A> combiner().
В последнем случае Java API 8 утверждает, что:
Функция объединителя может складывать состояние из одного аргумента в другой и возвращать его или возвращать новый контейнер результатов.
Почему первый метод collect не получает также BinaryOperator<R>?