为什么我不能将 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"。那不符合车辆的条件。