【現役Webエンジニア厳選!】プログラミング初心者におすすめの言語TOP3!【JavaScript, Python, Java】
野田竣介
フェルメール株式会社
今回はこのような質問をいただきました。
MapのvalueにList入れるのめんどくさいな…
MapのvalueにListを入れる場合、ちょっと面倒ですよね。
そこで今回はこちらの質問について解説していきます!
結論から言うと、GuavaのMultimapというもの利用することで簡単に実装できます。
ただ、ライブラリを入れるほどでもないということもあると思うので、独自に作ってみました!
MapのvalueにListを入れる場合、ちょっと面倒ですよね。
みたいなことをする必要があります。
毎回、分岐処理を書くのも面倒なので共通化しましょう!
/**
* map の key の List に value を追加して map を返す
* @param map 追加対象のMap
* @param key 追加するキー
* @param value 追加する値
* @param <K> キーの型
* @param <V> 値の型
* @return 値を追加したMap
*/
public static <K, V> HashMap<K, List<V>> add(HashMap<K, List<V>> map, K key, V value) {
List<V> list = map.get(key);
if (Objects.isNull(list)) {
list = new ArrayList<>();
}
list.add(value);
map.put(key, list);
return map;
}
HashMap<String, List<String>> map = new HashMap<>();
map = add(map, "a", "12345");
map = add(map, "a", "123");
map = add(map, "b", "246");
map.forEach((key, value) -> System.out.println(key + " は " + value + " です"));
a は [12345, 123] です
b は [246] です
初回の追加でも何も考えずに追加できるのでいいですね!
Enumのように、決まっている値がキーであれば最初にすべて初期化すると楽ですね。
今回のような処理も不要だと思います。
メソッドの引数の参照渡しができたらもっと使いやすくなるけど、Javaだとできないっぽい。
戻り値を設定するしか方法はないのかなぁ。