2016-04-03 5 views
1

Ich frage mich, ob es eine Möglichkeit gibt, den folgenden Scala-Code zu optimieren, weil es nicht sehr effizient aussieht. Grundsätzlich möchte ich nur ein Objekt, das kein Tweet ist, aus dem Fluss entfernen und es auf Tweet statt Any abbilden.Scala Akka Streams Merging Filter und Karte

val tweetsFlow = Flow[Any].filter({ 
    case _: Tweet => true 
    case _ => false 
}).map({ 
    case tweet: Tweet => tweet 
}) 

Antwort

6

Sie könnten verwenden collect Methode, einige ähnliche

val tws = Vector(
    "foo", 
    Tweet(Author("foo"), tms, "foo #akka bar"), 
    1000L, 
    Tweet(Author("bar"), tms, "foo #spray bar"), 
    Tweet(Author("baz"), tms, "foo bar"), 
    1 
) 

val tflow = Flow[Any].collect { 
    case x: Tweet => x 
} 
Source(tws).via(tflow)