在Groovy 1.x中编写Java8 Lambdas

时间:2015-04-03 22:26:51

标签: java groovy lambda java-8 spock

有没有办法在groovy 1.x中编写Java8 lambda表达式? 我知道groovy 2.3.x支持来自这个post的Java8 lambda表达式,但是有可能在groovy中编写Java 8 lambda吗? 我有一些Java 8代码,我正在使用Spock进行测试,但是我的项目使用了groovy 1.x。

2 个答案:

答案 0 :(得分:10)

事实证明,您可以使用groovy 1.x中的as关键字将groovy Closure转换为java 8 lambda。
考虑以下java类

public class Foo {
    public static boolean getBar(Predicate<String> predicate) {
        return predicate.test("hello");
    }
}

从Spock测试(在groovy中)我们可以写

class FooSpecTest extends Specification {
    def "test foo"() {
        when:
        boolean result = Foo.getBar({x -> x.contains("blah")} as Predicate<String>)
        then:
        result == true
    }
}

答案 1 :(得分:5)

不,建议使用Groovy 3.0

不是最新的2.3 / 2.4.1:

根据您发布的link,这些评论已经回答了问题。您可以尝试使用Closures

基于官方Groovy文档:

  

Groovy 2.3不支持Java 8提供的新语法结构   (例如lambdas,方法引用,接口中的默认方法,   等),但您已经可以使用JDK 8提供的新API,   甚至使用Groovy闭包来代替Java 8 lambdas。

您使用的是较旧的Groovy版本,如果2.3不支持,则您的版本不会。

来源:http://www.groovy-lang.org/releasenotes/groovy-2.3.html

2.4(http://www.groovy-lang.org/releasenotes/groovy-2.4.html

中没有提及