【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 にまとめてあります