2016-04-03 59 views
1

我不知道是否有什麼辦法來優化下面的斯卡拉代碼,因爲它看起來效率不高。 基本上,我只是想從流中刪除任何不是Tweet的對象,並將它映射到Tweet而不是Any斯卡拉阿卡流合併過濾器和地圖

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

回答

6

您可以使用collect方法,有的像這樣

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)