Почему StringBuilder :: append является BiConsumer <StringBuilder, String>? [Дубликат]
На этот вопрос уже есть ответ здесь:
В чем разница между ссылочными типами методов экземпляра в Java 8? 2 ответаЯ нашел интересный пример использования Stream API:
Stream<String> stream = Stream.of("w", "o", "l", "f");
BiConsumer<StringBuilder, String> append = StringBuilder::append;
StringBuilder collected = stream.collect(StringBuilder::new, append, StringBuilder::append);
System.out.println(collected); //it works correctly
Stream.collect принимает три параметра:
Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner
BiConsumer принимает два параметра и ничего не возвращает. Почему эта строка компилируется и работает?
BiConsumer<StringBuilder, String> append = StringBuilder::append;
StringBuilder не имеет метода добавления void (java.lang.StringBuilder, java.lang.String).