如何在groovy中声明方法引用?
How to declare method reference in groovy?
我正在尝试使用 groovy 中的方法参考。我无法让它工作。
以下工作在groovy。
选项 2> list.stream().map(user -> user.getName()).collect(Collectors.toList())
我想达到什么目的?
选项 1> list.stream().map(User::getName).collect(Collectors.toList())
上面的调用给出了以下错误。
unexpected token: : @ line 33, column 14.
User::getName
1 error
有什么建议可以实现吗?
你只能这样使用Collection::collect
:
list.collect{it.name}
您还可以指定收集器类型,例如,如果您想使用 .collect(Collectors.toSet())
的等价物,您可以使用:
list.collect(new HashSet(), {it.name})
创建 lambda 的 ::
快捷方式仅在 Groovy 之后才受支持
3.0。使用所述版本,您的代码应该可以正常工作。
然而,
你想做什么那里已经有快捷方式 Groovy
很久。您可以使用扩展运算符 *.
,它会给您一个
ArrayList
回来了。例如。 list*.name
是“groovy”的写法。
这里的主要区别在于,此操作是 eager。如果你
需要 Java 流的惰性(例如因为你的例子是
简化),那么你总是可以使用 Groovy 闭包而不是
一个拉姆达。可能需要演员表,但 Groovy 通常是人物
这件事很好。
例如:list.stream().map{ it.name }.collect(Collectors.toList())
我觉得这个场景太复杂了。
如果你只是想重写java的
list.stream().map(User::getName).collect(Collectors.toList())
进入Groovy,你只需得到:
list*.name
或(getter)
list*.getName()
我正在尝试使用 groovy 中的方法参考。我无法让它工作。
以下工作在groovy。
选项 2> list.stream().map(user -> user.getName()).collect(Collectors.toList())
我想达到什么目的?
选项 1> list.stream().map(User::getName).collect(Collectors.toList())
上面的调用给出了以下错误。
unexpected token: : @ line 33, column 14.
User::getName
1 error
有什么建议可以实现吗?
你只能这样使用Collection::collect
:
list.collect{it.name}
您还可以指定收集器类型,例如,如果您想使用 .collect(Collectors.toSet())
的等价物,您可以使用:
list.collect(new HashSet(), {it.name})
创建 lambda 的 ::
快捷方式仅在 Groovy 之后才受支持
3.0。使用所述版本,您的代码应该可以正常工作。
然而,
你想做什么那里已经有快捷方式 Groovy
很久。您可以使用扩展运算符 *.
,它会给您一个
ArrayList
回来了。例如。 list*.name
是“groovy”的写法。
这里的主要区别在于,此操作是 eager。如果你 需要 Java 流的惰性(例如因为你的例子是 简化),那么你总是可以使用 Groovy 闭包而不是 一个拉姆达。可能需要演员表,但 Groovy 通常是人物 这件事很好。
例如:list.stream().map{ it.name }.collect(Collectors.toList())
我觉得这个场景太复杂了。
如果你只是想重写java的
list.stream().map(User::getName).collect(Collectors.toList())
进入Groovy,你只需得到:
list*.name
或(getter)
list*.getName()