Функция списка строк Java 8 с лямбда не работает в Groovy - PullRequest
1 голос
/ 26 апреля 2019

В 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, потому что я использую версию Groovy, предшествующую 2.6, это не так.Я не могу это изменить, это тот, который используется в Каталоне.Я получаю сообщение об ошибке «неожиданный токен ->»

Я пытался заключить лямбда-функцию в квадратные скобки этими двумя способами, но ни один из них не работает:

    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 ]

1 голос
/ 26 апреля 2019

У вас есть дополнительные фигурные скобки в Java и Groovy, поэтому он не работает

List<String> lines = Files.lines(outputFile)
                .map({ line -> line.replaceAll('date1', "$newdate1") })
                .collect(Collectors.toList())
Files.write(outputFile, lines)
0 голосов
/ 06 июня 2019

Я наконец-то нашел очень простое решение (чисто заводное):

'convert input file into text'
fileText = infile.text

'Replace the value date1 with newdate1'
fileText = fileText.replaceAll('date1', "$newdate1")

'then send the text to the output file'
outfile << fileText
...