gpt4 book ai didi

java - 为什么我不能将 Function.identity 引用为收集器中的方法引用

转载 作者:行者123 更新时间:2023-12-02 16:20:06 24 4
gpt4 key购买 nike

有人可以建议一下,为什么我无法在此处应用方法引用?

工作代码。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com