带lambda的java 8字符串列表函数在groovy中不起作用

时间:2019-04-26 13:02:57

标签: groovy lambda java-8 incompatibility

在Java 8中,此代码可以完美运行:

     Stream<String> lines = Files.lines(outfile) {
     List<String> replaced = lines
         .map(line ->
             line.replaceAll('date1', "$newdate1"))
         .collect(Collectors.toList())
     Files.write(outfile, replaced)
 }

在groovy中,因为我使用的是2.6之前的groovy版本,所以没有。我无法更改它,是Katalon中使用的那个。我收到错误消息“意外令牌->”

我试图用以下两种方法将lambda函数括在方括号中,但没有用:

    Stream<String> lines = Files.lines(outfile) {
             List<String> replaced = lines
                 .map({line ->
                line}.replaceAll('date1', "$newdate1"))
            .collect(Collectors.toList())
        Files.write(outfile, replaced)
}

    Stream<String> lines = Files.lines(outfile) {
    List<String> replaced = lines
        .map({line -> 
                line.replaceAll('date1', "$newdate1")})
        .collect(Collectors.toList())
    Files.write(outfile, replaced)
 }

这种包装类型的隔离/从上下文行中取出,无法识别为字符串,并且replaceAll无法正常工作。

我不知道什么是正确的方法来使它起作用。

2 个答案:

答案 0 :(得分:1)

您在Java和Groovy中有多余的花括号,这就是为什么它不起作用的原因

List<String> lines = Files.lines(outputFile)
                .map({ line -> line.replaceAll('date1', "$newdate1") })
                .collect(Collectors.toList())
Files.write(outputFile, lines)

答案 1 :(得分:0)

我终于找到了一个非常简单的解决方案(纯常规):

false