2014-10-30 14 views
5

Ich arbeite mit Java 8 Lambdas, und hatte Erfolg mit einfachen Anwendungsfällen. Ich komme aus einem gemischten Hintergrund von Java und C# .NET, so dass ich mit Lambda im Code vertraut bin.Java Lambda's Parsen eine Sammlung mit einer bedingten Überprüfung

In meinem aktuellen Anwendungsfall versuche ich eine Liste aus einer Sammlung namens Werte zurückzugeben. Ich habe das erfolgreich so gemacht

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

Relativ einfach und unkompliziert. Ich möchte das Gleiche tun, aber nur Elemente aus der Sammlung hinzufügen, bei denen ein boolesches Flag auf dem Element auf true gesetzt ist. Ich dachte, dass funktionieren würde wie diese

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

Aber der Compiler hält diesen Fehler zeigt: Type mismatch: cannot convert from List<Object> to List<Model> Ich glaube, der Compiler intelligent genug sein sollte, den Ausgabetyp aus der Map-Funktion zu kennen und in der Tat tut auf meinem ursprünglichen vereinfachtes Beispiel. Deshalb glaube ich, dass dies nicht der beste Weg ist.

Für alle aus dem .NET-Stack, wäre das äquivalent in C#/LINQ

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

Ich weiß, ist es gibt viele andere gute Möglichkeiten, dies ohne Lambda-Ausdrücke zu tun, aber ich würde gerne wissen, wie ich kann dies in Java mit Java Lambdas erreichen?

Antwort

7

Ich denke, dass filter ist, was Sie suchen und nicht map

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