如何在groovy中声明方法引用?



我尝试在groovy中使用方法引用。我不能让它工作。

下面的代码在groovy中运行。

Option2>list.stream().map(user -> user.getName()).collect(Collectors.toList())

我想达到什么目标?

Option1>list.stream().map(User::getName).collect(Collectors.toList())

上面的调用给出了以下错误:

unexpected token: : @ line 33, column 14.
User::getName
1 error

有什么建议吗?

创建lambda的::快捷方式仅在Groovy之后才被支持3.0. 使用上述版本,您的代码应该可以正常工作。

,你想做的事情在Groovy中已经有了快捷方式长时间。您可以使用扩展操作符*.,它会给您一个ArrayList回来。例:list*.name是"groovy"。这就对了

这里的主要区别在于,该操作是eager. 如果你需要Java流的惰性(例如,因为您的示例是)简化),那么您总是可以使用Groovy闭包来代替一个λ。这里可能需要演员阵容,但Groovy通常是可以胜任的这件事做得很好。

。:list.stream().map{ it.name }.collect(Collectors.toList())

您只能这样使用Collection::collect:

list.collect{it.name}

您还可以指定收集器类型,例如,如果您想使用相当于.collect(Collectors.toSet())的收集器,您可以使用:

list.collect(new HashSet(), {it.name})

Groovy演示

我觉得这个场景太复杂了。

如果你只是想重写java的

list.stream().map(User::getName).collect(Collectors.toList())

放到Groovy中,你可以得到:

list*.name

或(getter)

list*.getName()

最新更新