我发现了一个使用 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
Run Code Online (Sandbox Code Playgroud)
Stream.collect 接受三个参数:
Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner
Run Code Online (Sandbox Code Playgroud)
BiConsumer 接受两个参数并且不返回任何内容。为什么这条线可以编译和工作?
BiConsumer<StringBuilder, String> append = StringBuilder::append;
Run Code Online (Sandbox Code Playgroud)
StringBuilder 没有 void 方法 append(java.lang.StringBuilder, java.lang.String)。