【Java】Mapの値からキーを取得する方法

この記事ではJavaのMapの値からキーを取得する方法を紹介します。
まず、JavaのMapにキー値指定して値を取り出すにはgetメソッドを使用することで可能です。
| get(キー値) | Mapのキー値に対応する値を取得する。 |
Map<String, String> map = new HashMap<>();
map.put("キー値1", "値1");
map.put("キー値2", "値2");
System.out.println(map);
System.out.println(map.get("キー値1"));
System.out.println(map.get("キー値2"));
//実行結果
{キー値1=値1, キー値2=値2}
値1
値2
【Java】Mapのgetの動作確認(存在する場合はキー値に対応する値、存在しない場合はnull)
一方で、値に対応するキー値を取得するメソッドはないです。なぜならキー値は重複を許さないが、値は重複し得るため、一つの値に紐づくキー値は複数というパターンがあり得るからです。
逆に言えば、値が重複しない前提であれば、Mapのキー値と値を逆転させたMapを作成することで、getメソッドを使用し、値からキー値を取り出すことが可能になります。※なお重複する場合は後勝ちです。
Map<String, String> map = new HashMap<>();
map.put("キー値1", "値1");
map.put("キー値2", "値2");
System.out.println(map);
Map<String, String> 反転map = new HashMap<String, String>();
for (Map.Entry<String, String> entry : map.entrySet()) {
反転map.put(entry.getValue(), entry.getKey());
}
System.out.println(反転map);
System.out.println(反転map.get("値1"));
System.out.println(反転map.get("値2"));
// 実行結果
{キー値1=値1, キー値2=値2}
{値1=キー値1, 値2=キー値2}
キー値1
キー値2
for (Map.Entry<String, String> entry : map.entrySet())にてMapの要素を順に読込、entry.getKey()はキー値、getValue()は値を取り出します。
格納用のマップのキー値にentry.getValue()で値、値にentry.getKey()のキー値をセットすることで、キー値と値が逆転したMapを作成することができます。
なお、キー値が重複する場合は後勝ちです。
キー値と値が逆転したMapからgetメソッドで取得を行うことで、値に紐づくキー値を取得することができます。

Javaの記事の一覧はJava にまとめてあります
