1. ホーム
  2. java

[解決済み] JavaでHashMapのキーと値を反転させる

2023-06-27 03:13:19

質問

簡単な質問です。 私は、キーと値を逆にしたい単純なHashMapを持っています。

HashMap<Character, String> myHashMap = new HashMap<Character, String>();
myHashMap.put('a', "test one");
myHashMap.put('b', "test two");

で、新しいHashMapを作り、そこに反対のものを入れたいと思います。

HashMap<String, Character> reversedHashMap = new HashMap<String, Character>();
e.g. Keys "test one" & "test two" and values 'a' & 'b'.

どのように解決するのですか?

<ブロッククオート

どれも個性的ですね。

値が一意であることが確かであれば、古いマップのエントリを繰り返し処理することができます。

Map<String, Character> myNewHashMap = new HashMap<>();
for(Map.Entry<Character, String> entry : myHashMap.entrySet()){
    myNewHashMap.put(entry.getValue(), entry.getKey());
}

また、以下のようなBi-Directionalマップを使用することもできます。 グアバ が提供する inverse() メソッドを使用します。

BiMap<Character, String> myBiMap = HashBiMap.create();
myBiMap.put('a', "test one");
myBiMap.put('b', "test two");

BiMap<String, Character> myBiMapInversed = myBiMap.inverse();

として ジャバ・エイト が抜けているので、この方法でも可能です。

Map<String, Integer> map = new HashMap<>();
map.put("a",1);
map.put("b",2);

Map<Integer, String> mapInversed = 
    map.entrySet()
       .stream()
       .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey))

最後に、私の投稿を プロトンパックライブラリ このライブラリには Stream API 用のユーティリティメソッドが含まれています。これを使うと、次のようにできます。

Map<Character, String> mapInversed = MapStream.of(map).inverseMapping().collect();