2016-04-09 15 views
5

Ist entweder Option 1 oder Option 2 korrekt (z. B. eine gegenüber der anderen) oder sind sie gleichwertig?Java 8 Streams Filter Intention of Lazy Evaluation

Option 1

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

oder

Option 2

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

Die Antwort auf die vorherige Frage ist falsch. Ich bin kein Benchmark-Experte, aber meine eigenen Tests zeigen, dass Option1 deutlich besser abschneiden kann. Ich werde meinen Testcode für die andere Frage veröffentlichen, und ich würde mich freuen, wenn meine Ergebnisse überprüft werden. –

Antwort

8

zu kompilieren, sollte der zweite sein

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

Sie sind beide gleichwertig. Manchmal ist einer lesbarer als der andere.

Eine alternative Möglichkeit, die zweite des Schreibens wäre eine Methode Referenz zu verwenden:

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

Beachten Sie auch, dass die Konvention den Punkt am Anfang der Zeile zu platzieren ist nicht das Ende, wie Sie würde eine Aufzählung schreiben.

+0

Danke! Ich habe das Beispiel angepasst, um die Fehler zu beheben. –