scala, filter, eine Sammlung basiert auf mehreren Voraussetzungen

Ich habe einen code wie:

val strs = List("hello", "andorra", "trab", "world")
def f1(s: String) = !s.startsWith("a")
def f2(s: String) = !s.endsWith("b")

val result = strs.filter(f1).filter(f2)

nun f1 und f2 angewendet werden soll, beruht auf einem Umstand, wie zum Beispiel:

val tmp1 = if (cond1) strs.filter(f1) else strs
val out  = if (cond2) tmp1.filter(f2) else tmp1

ist es ein schöner Weg, dies zu tun, ohne eine zwischenvariable mit einem tmp1?

eine Möglichkeit zu filtern, basierend auf einer Liste von Funktionen, wie:

val fs = List(f1 _,f2 _)
fs.foldLeft(strs)((fn, list) => list.filter(fn))

aber dann würde ich brauchen, um zu bauen eine Liste von Funktionen auf der Grundlage der Bedingungen (und ja, ich würde sich das problem mit einem temporären string-Liste variable, um eine temporäre Funktion list-variable (oder sollte ich brauchen, um eine veränderliche Liste)).

Ich Suche so etwas (natürlich nicht kompilieren, sonst hätte ich bereits die Antwort auf die Frage):

val result = 
  strs
    .if(cond1, filter(f1))
    .if(cond2, filter(f2))
  • Klingt wie Sie wollen, die eine Liste von Tupeln (Zustand,filterPredicate). Anschließend können Sie diese Liste filtern basierend auf, ob oder nicht der Zustand (z.B. _._1) hält. Jetzt haben Sie eine Liste von Funktionen, die Sie anwenden möchten. Sie können dann diese Karte mit dem string und reduzieren Sie mit && (Logik und). Sorry, wenn es zu wellig ist.
  • danke, das ist eine gute Idee, auch, aber ich suchte etwas, das mehr wie noah ' s Antwort.
Schreibe einen Kommentar