2016-07-25 26 views
0

ich etwas wie das folgende ich versucht:„any“ Funktion in groovy Mit immer das Ergebnis des letzten Elements Schließung Rückkehr

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

Ergebnis ist:

foo - foo 
foo - bar 
baz - bar 
false 

Ich möchte testen wenn eine der Zeilen der mehrzeiligen Zeichenfolge

"""foo 
bar""" 

ist in dem Array ['foo', 'baz'].

Aber hier gibt es ein falsches Ereignis zurück, wenn foo in der Zeichenfolge vorhanden ist.

Was mache ich falsch?

Antwort

1

Versuchen:

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

Genau das, was ich brauchte. Vielen Dank. –

0

Eine Möglichkeit, dies tun könnte:

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

Aber ich ein einziges logisches Ergebnis brauchen, und ich denke, das ist nur ein einziges Mal nicht zurückkehren wird als „any“ tun könnte. Die println-Anweisung dient nur zum Debuggen. Was ich wirklich wissen muss, ist, ob das Wetter oder keine der Zeilenfolgen in der mehrzeiligen Zeichenfolge im Zeichenfolgenarray vorhanden ist. Irgendwelche Tipps ? Warum meine "any" -Funktion nicht wahr und stoppt das erste Mal, wenn die Schließung gleich wahr ist? –

+0

Bei der Verwendung der any, führen Sie jede Zeile der Multilinie durch die any, so dass Sie möglicherweise die wahre - aber die letzte Zeile ist der Wert, der zurückgegeben wird. Es sei denn, Sie haben eine Statusvariable festgelegt oder eine Rückgabe ausgeführt, als Sie die erste Übereinstimmung gefunden haben. –