2016-07-25 5 views
0

Я пытаюсь что-то вроде следующего:Использование «любой» функции в заводной всегда возвращает результат закрытия последнего пункта

"""foo 
bar""".eachLine { line -> 
    ['foo', 'baz'].any{ 
     println(it + ' - ' + line) 
     line == it 
    } 
} 

результата:

foo - foo 
foo - bar 
baz - bar 
false 

Я хотел бы проверить если какой-либо из строк многострочного строки

"""foo 
bar""" 

присутствует в массиве ['foo', 'baz'].

Но здесь он возвращает ложное событие, если foo присутствует в строке.

Что я делаю неправильно?

ответ

1

Try:

"""foo 
bar""".split('\\n').any { line -> ['foo', 'baz'].contains(line)} 
+0

То, что мне нужно. Благодарю. –

0

Одним из способов вы можете сделать это:

def multiLine = ("""foo 
bar""") 
List lines = multiLine.split("\n") as List 
def lookingFor = ['foo','baz'] 

if (lookingFor.intersect(lines).size() > 0) { 
     println "true" 
     return true 
} 
+0

Но мне нужен один логический результат, и я думаю, это не будет возвращать только один раз, как «любой» мог бы сделать. Вывод println предназначен только для отладки, мне действительно нужно знать погоду или нет строки строк в многострочной строке, присутствующие в массиве строк. Какие-нибудь советы ? Почему моя «любая» функция не возвращает true и останавливает первый раз, когда замыкание равно true? –

+0

При использовании любого из них вы выполняете каждую строку мультилинии через любое, поэтому у вас может быть значение true, но последняя строка - это значение, которое будет возвращено. Если вы не установили переменную состояния или не сделали возврат, когда вы нашли первое совпадение. –