filter
withFilter
の2種類のメソッドが存在します。
どちらも引数は
T => Boolean
でFilterの処理を行いますが、ほかのmapや多段のfilterを組み合わせる場合違いが出てきます。
以下が実際の実行結果の違いです。
どちらも、偶数だけを取り出して、2倍をしたリストを取得しています。
val l = List(1,2,3,4)
l.withFilter( i => {
println("fitler " + i)
i % 2 == 0
}).map( i => {
println("map " + i)
i * 2
})
l.filter( i => {
println("fitler " + i)
i % 2 == 0
}).map( i => {
println("map " + i)
i * 2
})
実行結果は以下のようになります。
//withFilter -> map
fitler 1
fitler 2
map 2
fitler 3
fitler 4
map 4
fitler 5
//filter -> map
fitler 1
fitler 2
fitler 3
fitler 4
fitler 5
map 2
map 4
filterを使用した場合、途中でfilterされたListが生成されてしまいますが、
withFilterを使用した場合、中間状態のListは生成されません。
もし、filterやmapを何段も使用する場合はwithFilterを使ったほうがパフォーマンスが高くなります。
0 件のコメント:
コメントを投稿