This question already has answers here:
java 8 Collector<String, A, R> is not a functional interface, who can tell why?

(2个答案)



Java8: Using Function::identity in Collectors.toMap(..) creates an argument mismatch error

(1个答案)


2年前关闭。





通常在flatMap之后,我们使用collect(Collectors.toList())收集数据并返回List

但是为什么不能使用Collectors::toList代替呢?我尝试使用它,但是出现编译错误。

我试图进行搜索,但是找不到任何解释。

非常感谢。

最佳答案

您正在调用<R, A> R collect(Collector<? super T, A, R> collector)接口的Stream方法。 Collectors.toList()返回一个Collector<T, ?, List<T>>,它与collect方法的参数的所需类型匹配。因此someStream.collect(Collectors.toList())是正确的。

另一方面,方法引用Collectors::toList不能作为collect方法的参数,因为方法引用只能在需要功能接口的地方传递,而Collector不是功能接口。

您可能已经将Collectors::toList传递给需要Supplier<Collector>的方法。同样,您可以将其分配给这样的变量:

Supplier<Collector<Object,?,List<Object>>> supplierOfListCollector = Collectors::toList;

关于java - 为什么在Java 8 Lambda中使用“Collectors.toList()”而不是“Collectors::toList”? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51132863/

10-11 13:13