有人可以建议一下,为什么我无法在此处应用方法引用?
工作代码。
System.out.println(
Arrays.stream(str.split(" "))
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting())));
编译错误,无法解析方法
System.out.println(
Arrays.stream(str.split(" "))
.collect(Collectors.groupingBy(Function::identity,Collectors::counting)));
最佳答案
因为 groupingBy()
需要一个 Function
,即接受单个参数并返回某些内容的东西。
Function.identity()
返回一个函数。
但是 Function::identity
引用 identity()
方法,该方法不接受任何参数,因此不能使用作为一个函数。
类似地,groupingBy()
需要一个 Collector
实例作为其第二个参数。 Collectors.counting()
返回一个收集器。所以你可以使用它。但是 Collector::counting
引用了 counting()
方法,并且不带参数的单个方法根本不足以提供 Collector 接口(interface)的实现,该接口(interface)有 5 个方法。
以汽车为例,如果您调用需要车辆的方法,则可以调用 Garage.getCar() 来获取汽车并将返回的汽车作为参数传递。但是传递 garage::getCar
是没有意义的,因为那将是“能够给你一辆车的东西”。这不符合车辆的资格。
关于java - 为什么我不能将 Function.identity 引用为收集器中的方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59697390/