Groovy 编译器不接受 java 8 Lambda

Posted

技术标签:

【中文标题】Groovy 编译器不接受 java 8 Lambda【英文标题】:Groovy compiler does not accept java 8 Lambdas 【发布时间】:2014-07-17 09:20:23 【问题描述】:

我们知道,Groovy 语法接受闭包。 今天,Java 8 也增加了它的语法闭包。

但是,当我在 groovy 文件中编写 java8 闭包时,出现如下错误:

Person.findAll().stream().filter(e-> e.age > 20)

我们收到此错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 7: unexpected token: -> @ line 7, column 39.
   Person.findAll().stream().filter(e-> e.controllerId > 0)
                                         ^

1 error

尽管如此,以下工作成功:

Person.findAll().stream()  

【问题讨论】:

Groovy 计划在 version 3 上接受 Java 的 8 语法 这似乎不是个问题。 【参考方案1】:

是的,Groovy 解析器不接受 Java 8 Lambda(不是闭包)。

您可以使用闭包代替它(假设您使用的是 Groovy 2.3.*)

即:

Person.findAll().stream().filter(  e -> e.age > 20  )

编辑:

Groovy 3.0+ 将接受 lambda 格式

【讨论】:

Groovy 计划在版本 3 上接受 Java 的 8 语法 真的,java 8 会让所有程序员都不再回归 groovy @AbdennourToumi 除了便于编写脚本、元编程、动态类型、AST 转换、数据解析、易于 DSL 创建以及能够获取资源,你可能是对的 ;-) 我在 Groovy 中尝试了以下代码,“x”是数组而不是元素。 “Arrays.stream(array).filter( x -> x.equals(dependent) || x.equals(governor) ).toArray();”有什么建议吗? @DaSh 我猜你所命名的array 是一个列表

以上是关于Groovy 编译器不接受 java 8 Lambda的主要内容,如果未能解决你的问题,请参考以下文章

GroovyGroovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )

Groovy 元类与 Java 8 的互操作性

groovy 在eclipse中如何实现语法提示

Lambda表达式用法大比较: Scala和Java 8

Lambda表达式用法大比较: Scala和Java 8

groovy 中的闭包与 java 8 中的闭包(lambda 表达式)?