2016-04-15 8 views
2

Gibt es eine Möglichkeit mit einem Ausdruck zu filtern, die Linien, die ein Wort „word1“ oder die anderen „word2“ so etwas wie:Filter die Linien durch zwei Worte Streaming

val res = lines.filter(line => line.contains("word1" or "word2")) 

weil dieser Ausdruck doesn‘ t arbeiten.

Vielen Dank im Voraus

Antwort

4

Wenn Linie eine String optimale Wahl regexp würde, ist:

val pattern = "word1|word2".r 

lines.filter(line => pattern.findFirstIn(line).isDefined) 

sonst (Typ andere Sequenz) Sie können Seq.exists verwenden:

lines.filter(line => Seq("foo", "bar").exists(s => line.contains(s))) 

, die eine nimmt single, die von element zu boolean (hier (String) ⇒ Boolean) und:

012 mappt

testet, ob ein Prädikat für mindestens ein Element dieser iterierbaren Sammlung gilt.