2016-04-09 12 views
5

L'opzione 1 o l'opzione 2 sono corrette (ad esempio una preferita rispetto all'altra) o sono equivalenti?Filtro stream Java 8 Intenzione di valutazione Lazy

Opzione 1

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

o

Opzione 2

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

La risposta per la domanda precedente non è corretta. Non sono un esperto di benchmarking, ma i miei test dimostrano che Option1 può offrire prestazioni significativamente migliori. Pubblicherò il mio codice di test per l'altra domanda, e gradirei la recensione di qualcuno dei miei risultati. –

risposta

8

Per compilare, il secondo dovrebbe essere

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

Sono entrambi equivalenti. A volte uno è più leggibile rispetto all'altro.

Un modo alternativo di scrivere la seconda sarebbe quella di utilizzare un metodo di riferimento:

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

Si noti inoltre che la convenzione è quello di posizionare il punto all'inizio della riga, piuttosto che alla fine, come si scriverebbe un elenco puntato.

+0

Grazie! Ho modificato l'esempio per correggere gli errori. –