2016-04-09 12 views
5

Czy opcja 1 lub opcja 2 są poniżej poprawne (na przykład jedna preferowana nad drugą), czy są one równoważne?Strumień filtrów w języku Java 8 Wzgląd na leniwe oceny

Wariant 1

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

lub

Wariant 2

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

Odpowiedź na poprzednie pytanie jest niepoprawna. Nie jestem ekspertem od testów porównawczych, ale moje własne testy pokazują, że opcja 1 może działać znacznie lepiej. Opublikuję mój kod testowy w drugim pytaniu i byłbym wdzięczny komukolwiek za recenzję moich ustaleń. –

Odpowiedz

8

celu kompilowania, druga powinna

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

Obie są równoważne. Czasami jeden jest bardziej czytelny niż drugi.

Alternatywnym sposobem pisania drugi byłoby użyć odniesienie metoda:

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

Należy również zauważyć, że konwencja jest umieszczenie kropki na początku linii, a nie do końca, jak ty napisze listę wypunktowaną.

+0

Dzięki! Poprawiłem przykład, aby naprawić błędy. –