に変換し、java8とストリームapiを使用します。Map <Long、MyObject>をMap <long、List <MyObject>>
あり唯一のMyObjectにはある、と私は
Map<Long, MyObject>
リストは、一つの要素を持っている
Map<Long, List<MyObject>>
に変換したいですか?
に変換し、java8とストリームapiを使用します。Map <Long、MyObject>をMap <long、List <MyObject>>
あり唯一のMyObjectにはある、と私は
Map<Long, MyObject>
リストは、一つの要素を持っている
Map<Long, List<MyObject>>
に変換したいですか?
Map<Long, List<MyObject>> newMap = oldMap.entrySet().stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> new ArrayList<>(Arrays.asList(e.getValue()))));
値の不変のリストに問題がない場合、最後の行は少し簡略化することができる。
e -> Collections.nCopies(1, e.getValue())));
このラムダ式は初心者のように見えるかもしれません。それでも有効で正しい。 +1 –
@RoelStrolenberg OPに金色のバッジがあります。私は彼がとても緑色ではないと思います。 –
私は何も言わなかった –
Map<Long, MyObject> yourMap = whateverYouImplementedHere;
Map<Long, List<MyObject>> listMap = new HashMap<>();
for (Entry<Long, MyObject> entry : yourMap.entrySet()){
listMap.put(entry.getKey(), new ArrayList<MyObject>(Arrays.asList(entry.getValue()));
}
これはOPの一般的な質問を解決するだろうが、他のデータ構造はずっと良くなっている –
これはJava 8のストリーム機能を使用しない – NimChimpsky
あなただけのエントリーセットのストリームを取得し、Collections.singletonList
と組み合わせtoMap
コレクタを使用することができます(不変のリストを作成する)を使用して、元のマップから新しい値を作成します。
Map<Long, List<MyObject>> transformedMap =
map.entrySet()
.stream()
.collect(toMap(Map.Entry::getKey,
e -> Collections.singletonList(e.getValue())));
キーが1つしかない場合は、マップを使用する理由は?代わりにセットではない? –
@ManuelS 1つの値で、1つのキーではありません。 – NimChimpsky
MyObjectが1つしかありません。なぜ、リストを使用したいのですか? –