Verwenden Sie Google Sammlungen. Beispiel:
Function<ViewValue, Long> transform = new Function<ViewValue, Long>() {
@Override
public Long apply(ViewValue from) {
return from.getId();
}
};
List<ViewValue> list = Lists.newArrayList();
List<Long> idsList = Lists.transform(list, transform);
UPDATE:
Auf Java 8 Sie nicht Guava brauchen. Sie können:
import com.example.ViewValue;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
Function<ViewValue, Long> transform = ViewValue::getId;
List<ViewValue> source = new ArrayList<>();
List<Long> result = source.stream().map(transform).collect(Collectors.toList());
Oder einfach:
List<ViewValue> source= new ArrayList<>();
List<Long> result = source.stream().map(ViewValue::getId).collect(Collectors.toList());
nächsten Update (die letzte nach Javaslang zu Vavr Namensänderung):
wert es ist Zeit über die Lösung zu erwähnen, mit
Javaslang Bibliothek (
http://www.javaslang.io/)
Vavr Bibliothek (http://www.vavr.io/). Nehmen wir an, dass wir unsere Liste mit echten Objekten haben:
List<ViewValue> source = newArrayList(new ViewValue(1), new ViewValue(2), new ViewValue(2));
Wir Transformation mit List-Klasse von Javaslang Bibliothek machen könnte (auf lange Sicht die collect ist nicht bequem laufen):
List<Long> result = io.vavr.collection.List.ofAll(source).map(ViewValue::getId).toJavaList();
Aber Sie werden siehe die Macht nur mit den Javaslang Listen:
io.vavr.collection.List<ViewValue> source = javaslang.collection.List.of(new ViewValue(1), new ViewValue(2), new ViewValue(3));
io.vavr.collection.List<Long> res = source.map(ViewValue::getId);
ich ermutige einen Blick zu nehmen verfügbare Sammlungen und neue Arten auf dieser Bibliothek (ich mag vor allem den Try-Typ). Sie finden die Dokumentation unter folgender Adresse:
http://www.javaslang.io/javaslang-docs/
http://www.vavr.io/vavr-docs/.
PS. Aufgrund des Oracle und des "Java" Wortes innerhalb des Namens mussten sie den Namen der Bibliothek von javaslang in etwas anderes ändern. Sie hatten sich zu Vavr entschlossen.
Sehr Javaesque Lösung - aber nicht in einem guten Weg. Es reduziert nicht genau die Menge oder Komplexität des Codes, oder? –
Ich würde sagen, es ist mehr LINQ-esque als Java-esque persönlich. Ich würde lieber den Conversion-Code erstellen und dann den Projektionsaspekt isolieren, aber wenn Sie die Conversion-Logik lieber mehrfach duplizieren möchten, ist das in Ordnung. Mit Lambda-Ausdrücken wäre es natürlich viel schöner. –
Ist es nicht so, wie wir es mit Comparator in Java machen? –