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年前关闭。
通常在
但是为什么不能使用
我试图进行搜索,但是找不到任何解释。
非常感谢。
(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