【发布时间】:2014-11-11 10:37:42
【问题描述】:
我对
的定义和用法感到困惑Stream.collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)
method 在 Java 8 中。
方法签名包括BiConsumer 类型参数。 BiConsumer 功能接口定义了一种功能方法accept(Object, Object)。据我了解,我现在可以将 congruent 的任何 lambda 表达式用于此功能接口。
但 Stream.collect JavaDoc 中提到的示例是例如
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
我不明白为什么ArrayList.add(E e)(单参数)与BiConsumer.accept(T t, U u)方法(两个参数)一致,并且可以作为collect方法中的累加器函数。
如您所见,我显然缺乏理解并感谢任何解释。
【问题讨论】:
-
它是
(list, element) -> list.add(element)的快捷方式。有一个副本,但我现在找不到... -
stackoverflow.com/a/23025159/2711488 有一个易于理解的插图。 This question 也可能是相关的。