web-dev-qa-db-ja.com

Java 8ストリームを使用してコレクションをソートしてコレクションをマップに変換する

カスタムソートを行い、Idと名前のマップを含むマップに変換する必要があるリストがあります。

これが私のコードです:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));

これでうまくいくと思いますが、ここでLinkedHashMapを作成せずに、ファンシー関数型プログラミングを使用して1行でジョブを実行できるかどうか疑問に思います。

16
Mohammad Adnan

あなたが持っている Collectors.toMap その目的のために :

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,Building::getName));

インスタンス化されるMap実装を強制したい場合は、これを使用します。

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,
                                  Building::getName,
                                  (v1,v2)->v1,
                                  LinkedHashMap::new));
44
Eran

toMap()/Java.util.stream.Collectorsを使用

0
mushfek0001