Googleのコレクションを使用してください。例:
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:
は、Java 8であなたがグアバは必要ありません。次のことができます。
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());
それとも:
List<ViewValue> source= new ArrayList<>();
List<Long> result = source.stream().map(ViewValue::getId).collect(Collectors.toList());
次の更新(Vavr名の変更にJavaslang後の最後の1):
現在のところ、それは
と解決策について言及する価値がありますJavaslangライブラリ(
http://www.javaslang.io/)
Vavrライブラリ(http://www.vavr.io/)。
List<Long> result = io.vavr.collection.List.ofAll(source).map(ViewValue::getId).toJavaList();
しかし、あなたは以下となります。私たちは(長い収集が便利ではない実行する上)JavaslangライブラリからListクラスで変換を行うことができ
List<ViewValue> source = newArrayList(new ViewValue(1), new ViewValue(2), new ViewValue(2));
:我々は本物のオブジェクトと私たちのリストを持っていると仮定しましょうのみJavaslangリストで電源を参照してください。
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);
私は(私は特に試しタイプが好き)、そのライブラリのコレクションと新しいタイプの利用可能な外観を取るように促します。次のアドレスにあるドキュメントをご覧ください。
http://www.javaslang.io/javaslang-docs/
http://www.vavr.io/vavr-docs/
PS。 Oracleと名前の中の "Java"という単語のために、彼らはjavaslangから別のものにライブラリ名を変更しなければならなかった。彼らはVavrに決めました。
非常Javaesqueソリューション - はなく、良い方法インチそれは正確にコードの量や複雑さを減らすことはありませんか? –
私は個人的にJava-esqueよりもLINQ-esqueの方がいいと思います。私はむしろ変換コードを作成してから投影アスペクトを分離したいと思いますが、変換ロジックの負荷が重複している場合は問題ありません。もちろん、ラムダ式ではもっとうまくいくでしょう。 –
JavaのComparatorと同じようなことはありませんか? –