2016-03-02 8 views
8

Quando si utilizza un flusso Java, a volte possono verificarsi valori null dopo la mappatura. Attualmente quando questi valori devono essere omessi, io uso:Filtrare articoli Null in Stream

.stream() 
.<other operations...> 
.filter(element -> element != null) 
.<other operations...> 

Per uno stile più funzionale un metodo di supporto piccola è presto scritto:

public static <T> boolean nonNull(T entity) { 
    return entity != null; 
} 

In modo che è possibile utilizzare un riferimento invece il metodo:

.stream() 
.<other operations...> 
.filter(Elements::nonNull) 
.<other operations...> 

Non riuscivo a trovare un tale metodo jdk, anche se sospetto che ne abbiano incluso uno. C'è un approccio diverso qui? O hanno omesso questo per una ragione?

+9

Cosa c'è di sbagliato con 'e -> e = null'!? – immibis

+2

Nulla di per sé, ma preferisco un riferimento al metodo quando questa situazione si verifica in una pipeline utilizzando solo riferimenti al metodo. Sembrava un combo breaker. –

+1

Correlato: [C'è qualche differenza tra Oggetti :: non Null e x -> x! = Null?] (Https://stackoverflow.com/questions/25435056/is-there-any-difference-between-objectsnonnull-and- xx-null) –

risposta

27

È possibile utilizzare Objects::nonNull dal Java8 SDK:

.stream() 
.<other operations...> 
.filter(Objects::nonNull) 
.<other operations...> 
+0

Non posso credere di averlo trascurato! –

+0

@BorisvanKatwijk controlla l'intera classe Objects, ha alcune cose interessanti :-) –

2

è possibile utilizzare il Objects::nonNull

restituisce true se il riferimento fornito non è nullo altrimenti restituisce falsa.

.stream() 
.<other operations...> 
.filter(Objects::nonNull) 
.<other operations...>