Thr*_*ion 2 java java-8 java-stream method-reference collectors
有人可以建议,为什么我不能在这里应用方法参考?
工作代码。
System.out.println(
Arrays.stream(str.split(" "))
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting())));
Run Code Online (Sandbox Code Playgroud)
编译错误,无法解析方法
System.out.println(
Arrays.stream(str.split(" "))
.collect(Collectors.groupingBy(Function::identity,Collectors::counting)));
Run Code Online (Sandbox Code Playgroud)
因为groupingBy()期望 a Function,即接受一个参数并返回一些东西的东西。
Function.identity() 返回一个函数。
但是Function::identity 引用了identity()不带任何参数的方法,因此不能用作函数。
类似地,groupingBy()作为它的第二个参数,期望 的实例 Collector。Collectors.counting()返回一个收集器。所以你可以使用它。但是Collector::counting引用该counting()方法,并且一个不带参数的方法根本不足以提供 Collector 接口的实现,它有 5 个方法。
以汽车类比,如果您调用一个需要车辆的方法,您可以调用garage.getCar()获取汽车并将返回的汽车作为参数传递。但是通过garage::getCar是没有意义的,因为那将是“能够给你一辆车的东西”。这不符合车辆的条件。