在Groovy 1.x中编写Java8 Lambdas

在Groovy 1.x中编写Java8 Lambdas,java,groovy,lambda,java-8,spock,Java,Groovy,Lambda,Java 8,Spock,有没有办法在Groovy1.x中编写Java8Lambda表达式? 我知道Groovy2.3.x支持Java8Lambda表达式,但是可以用groovy编写Java8Lambda吗? 我有一些用Spock测试的Java8代码,但我的项目在使用Groovy1.x时遇到了问题 否,建议用于Groovy 3.0 不在最新的2.3/2.4.1中: 根据你发表的评论,这些评论中已经给出了答案。您可以尝试使用闭包 根据官方Groovy文档: Groovy 2.3不支持Java8提供的新语法结构 (如lamb

有没有办法在Groovy1.x中编写Java8Lambda表达式? 我知道Groovy2.3.x支持Java8Lambda表达式,但是可以用groovy编写Java8Lambda吗? 我有一些用Spock测试的Java8代码,但我的项目在使用Groovy1.x时遇到了问题

否,建议用于Groovy 3.0 不在最新的2.3/2.4.1中: 根据你发表的评论,这些评论中已经给出了答案。您可以尝试使用
闭包

根据官方
Groovy
文档:

Groovy 2.3不支持Java8提供的新语法结构 (如lambdas、方法引用、接口中的默认方法、, 等等),但您已经可以很好地使用JDK 8提供的新API了, 甚至使用Groovy闭包代替Java8Lambdas

您使用的是一个旧得多的
Groovy
版本,如果
2.3
不支持它,您的版本将不支持它

资料来源:


2.4()中没有提到任何内容,结果表明,您可以在groovy 1.x中使用
as
关键字将groovy
闭包转换为java 8 lambda。

考虑下面的java类< /p>
public class Foo {
    public static boolean getBar(Predicate<String> predicate) {
        return predicate.test("hello");
    }
}
公共类Foo{
公共静态布尔getBar(谓词){
返回谓词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
    }
}
class-FooSpecTest扩展了规范{
def“测试食品”(){
什么时候:
布尔结果=Foo.getBar({x->x.contains(“blah”)}作为谓词)
然后:
结果==真
}
}

我不明白这一点:“我从这篇文章中知道groovy 2.3.x支持Java8 lambda表达式,但是可以在groovy中编写Java8 lambda吗?”。你说你知道,然后你收回它。为什么不能简单地将您的Spock版本升级到最新版本?您是否尝试过在Spock测试中运行Java 8代码?另外,发布一个Java8 lambda的示例。可能有一种简单的Groovy方法,我引用的帖子展示了Groovy编译器如何不接受java8语法。我想知道是否有另一种方法来构造编译的lambda表达式。e、 g.
新函数(…)
如果您使用的是Gradle,为什么不升级版本?我无法升级到Spock的最新版本,因为我的项目依赖groovy 1.x升级到2.x会破坏我所依赖的现有库。太好了!当我试图将“s”字符传递给函数时,我刚刚了解了as关键字,Groovy将其解释为字符串s’作为char(或者是Character)做了这个把戏。