首页 > 解决方案 > 带有 lambda 的 java 8 字符串列表函数在 groovy 中不起作用

问题描述

在 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不起作用。

我不知道什么是正确的方法,让它发挥作用。

标签: groovylambdajava-8incompatibility

解决方案


你在 Java 和 Groovy 中有额外的大括号,这就是它不起作用的原因

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

推荐阅读