我尝试在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()