Почему 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).

Ответы на вопрос(2)

Ваш ответ на вопрос