为什么我不能将 Function.identity 引用为收集器中的方法引用
why cant I refer Function.identity as method reference in collector
有人可以建议,为什么我不能在这里应用方法参考?
工作代码。
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
,即需要一个参数的东西,以及 returns 的东西。
Function.identity()
returns 一个函数。
但是 Function::identity
引用 identity()
方法,它不接受任何参数,因此不能用作函数。
类似地,groupingBy()
期望作为其第二个参数的是 Collector
的实例。 Collectors.counting()
returns 收藏家。所以你可以使用它。但是 Collector::counting
引用了 counting()
方法,单个不带参数的方法根本不足以提供 Collector 接口的实现,它有 5 个方法。
打个汽车的比方,如果你调用一个需要车辆的方法,你可以调用 garage.getCar()
来获取汽车并将返回的汽车作为参数传递。但是传递 garage::getCar
是没有意义的,因为那将是 "something that is able to give you a car"。那不符合车辆的条件。
有人可以建议,为什么我不能在这里应用方法参考?
工作代码。
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
,即需要一个参数的东西,以及 returns 的东西。
Function.identity()
returns 一个函数。
但是 Function::identity
引用 identity()
方法,它不接受任何参数,因此不能用作函数。
类似地,groupingBy()
期望作为其第二个参数的是 Collector
的实例。 Collectors.counting()
returns 收藏家。所以你可以使用它。但是 Collector::counting
引用了 counting()
方法,单个不带参数的方法根本不足以提供 Collector 接口的实现,它有 5 个方法。
打个汽车的比方,如果你调用一个需要车辆的方法,你可以调用 garage.getCar()
来获取汽车并将返回的汽车作为参数传递。但是传递 garage::getCar
是没有意义的,因为那将是 "something that is able to give you a car"。那不符合车辆的条件。