2016-04-09 8 views
5

以下のオプション1またはオプション2が正しいか(たとえば、他のものより優先されますか)、それとも同等ですか?コンパイルするJava 8 Streamsフィルタレイジー評価の意図

オプション1

collectionOfThings. 
    stream(). 
    filter(thing -> thing.condition1() && thing.condition2()) 

又は

オプション2

collectionOfThings 
    .stream() 
    .filter(thing -> thing.condition1()) 
    .filter(thing -> thing.condition2()) 
+0

前の質問に対する回答が正しくありません。私はベンチマーキングの専門家ではありませんが、私自身のテストでは、Option1が大幅に改善されていることが示されています。私はテストコードを他の質問に投稿し、私の所見を誰かが読んでいただければ幸いです。 –

答えて

8

、もう一つは

collectionOfThings. 
    stream(). 
    filter(thing -> thing.condition1()). 
    filter(thing -> thing.condition2()) 
であるべきです

どちらも同等です。時には、一方が他方よりも読みやすくなります。

秒1は、メソッド参照を使用することであろう書き込みの代替方法:

collectionOfThings 
    .stream() 
    .filter(Thing::condition1) 
    .filter(Thing::condition2) 

はまた、大会は、あなたのように、行の先頭ではなく最後にドットを配置することであることに注意してください箇条書きのリストを書くでしょう。

+0

ありがとう!私はエラーを修正するために例を調整しました。 –