2014-10-30 11 views
5

Sto lavorando con Java 8 Lambdas e ho avuto successo con casi d'uso semplici. Vengo da uno sfondo misto di Java e C#. NET, quindi ho familiarità con il codice di lambda.Java Lambda's Parse down a Collection con un controllo condizionale

Nel mio caso di utilizzo corrente sto provando a restituire un elenco da una raccolta denominata valori. L'ho fatto con successo in questo modo

values.stream().map(x -> x).collect(Collectors.toList()); 

Relativamente semplice e diretto. Mi piacerebbe fare la stessa cosa, ma aggiungere solo elementi dalla Collezione in cui un flag booleano sull'elemento è impostato su true. Ho pensato che avrebbe funzionato come questo

values.stream().map(x -> { if(x.isActive())return ((Model)x);}).collect(Collectors.toList()) 

Ma il compilatore continua a visualizzare questo errore: Type mismatch: cannot convert from List<Object> to List<Model> Credo che il compilatore dovrebbe essere abbastanza intelligente per conoscere il tipo di uscita dalla funzione di mappa e in effetti il ​​mio esempio semplificato originale. Ecco perché credo che questo non sia il modo migliore per farlo.

Per chiunque dalla pila .NET, l'equivalente in C#/LINQ sarebbe

values.Where(x => x.isActive()).ToList(); 

So che ci sono un sacco di altri buoni modi per fare questo, senza lambda, ma vorrei sapere come mi può raggiungere questo in Java usando Java Lambdas?

risposta

7

penso che filter è quello che si cerca e non un map

values.stream().filter(x->x.isActive()).collect(Collectors.toList());