2016-10-16 4 views
6

Ich habe eine Liste von Objekten A, hat A eine Eigenschaft namens Adresse, die einen Straßennamen hat - Strasse-Wie kann ich auf Java 8 Stream collect verschachtelt laufen

aus der Liste der Objekte AI getList aller wollen die Straßennamen. Eine Level-Sammlung scheint aus Streams machbar zu sein, aber wie bekomme ich eine geschachtelte String mit einer Zeile Code.

So für die Liste der Adressen von Objekt A bekommen Ich kann dies tun:

listOfObjectsA.stream().map(a::getAddress).collect(Collectors.toList()); 

Mein Ziel ist die Liste der Straßennamen zu bekommen, so dass ich nicht in der Lage eine zweite Ebene Sammlung lambdas mit herauszufinden.

Ich konnte das genaue Beispiel nicht finden, das ich suchte. Könnte mir bitte jemand dabei helfen.

+5

Vergessen Sie nicht, dass Sie auch einen einzelnen Lambda-Ausdruck verwenden können: '.map (a -> a.getAddress(). GetStreetName())' –

+0

@AlexisC. Ja, das funktioniert auch zusammen mit der Antwort. Vielen Dank –

Antwort

6

Sie können einfach die Kette einen anderen map Betrieb die Straßennamen zu erhalten:

listOfObjectsA 
.stream() 
.map(a::getAddress) 
.map(a -> a.getStreetName()) // or a::getStreetName 
.collect(Collectors.toList()); 

Die erste map Ihre Objekte in Address Objekte verwandelt, nimmt die nächste map jene Address Objekte und verwandelt sie in , die dann vom Sammler gesammelt.

Die Stream-Operationen bilden eine Pipeline, so dass Sie so viele Operationen haben können, wie Sie vor den Terminal-Operationen benötigen (in diesem Fall die Operation collect).