Angenommen, ich habe ein Objekt, das wie folgt aussieht:
%Vor%Wenn ich eine Arraylist vom Typ Obj erstelle und sie befülle, gibt es eine Möglichkeit, eine Liste aller Objekte im foo-Attribut des Arrays von der ArrayList zurückzugeben?
EDIT: Ich hätte klarer sein sollen, ich wollte das nicht per Iteration machen
Sie müssen durch Ihre List<Obj>
iterieren und die foo-Einträge in eine neue List
z.B.
%Vor%oder für Java 8 und darüber hinaus, verwenden Sie Streams so:
%Vor% Mit Guava können Sie eine Ansicht der foo
-Eigenschaft der Objekte in List
mit Lists.transform wie folgt:
Im Gegensatz zu anderen Lösungen ist dies eine reine Ansicht von List<Obj>
und als solche weist sie keine ganze separate ArrayList
oder einige solche im Speicher zu und kann in fast keiner erstellt werden Zeit unabhängig von der Größe Ihres List<Obj>
. Wenn Sie das ursprüngliche List<Obj>
ändern, spiegelt die foos
-Liste außerdem diese Änderung wider.
In Java 8 (irgendwann im Jahr 2012) wird dies mit Lambda-Ausdrücken und Methodenreferenzen viel einfacher. Sie können so etwas tun:
%Vor% Die Antwort von @Surodip verwendet eine kompakte Lösung, die auf Apache Commons-Sammlungen basiert.
Diese Lösung ist jedoch nicht typsicher, da der Transformer die Eigenschaft über den Zeichenfolgenausdruck referenziert: TransformerUtils.invokerTransformer("getName")
Hier ist eine ausführlichere, aber typensichere Lösung mit Apache Commons Collections:
%Vor%Die obigen Lösungen verwenden die Apache Commons Collection Version & gt; = 4, die Generics für die Typensicherheit unterstützt.
Unten ist die weniger typsichere Version für Apache Collections Version & lt; 4, die keine Generika verwendet:
%Vor%