Java ハッシュマップで値からキーを取得する方法

  1. Java で BidiMap を使って値から単一のキーを取得する
  2. Java の map.entrySet() を用いて値から単一のキーを取得する
  3. Java のストリーム API を使って値から複数のキーを取得する

ハッシュマップは Java には欠かせないもので、キーと値のペアメソッドを使うことで、データを柔軟に扱う力を与えてくれます。値にはキーが付いているので、そのキーを使って簡単に値を見つけることができます。しかし、値からキーを取得したい場合はどうでしょうか?

ここではそれについて説明します。私たちの目的は、値にアタッチされているキーを取得することです。

Java で BidiMap を使って値から単一のキーを取得する

双方向マップを使用して、その値を使用してキーを取得することができます。双方向性マップは、マップ内に重複した値が存在しないことを保証し、その値を使って鍵を取得できることを保証する。双方向性マップ BidiMapApache Commons Collections に付属している双方向性マップである。

最初の最も重要なステップは、プロジェクトに依存関係を含めることです。

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>

次の例では、4つのキーと値のペア要素を含む BidiMap を持っています。BidiMap は一意な値を含むので、一つのキーが複数の値を持つことはできません。そのため、各値から単一のキーしか取得できない。

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.TreeBidiMap;

public class Main {
    public static void main(String[] args) {

        BidiMap<String, String> bidiMap = new TreeBidiMap<>();

        bidiMap.put("key1", "value1");
        bidiMap.put("key2", "value2");
        bidiMap.put("key3", "value3");
        bidiMap.put("key4", "value4");

        System.out.println(bidiMap.getKey("value4"));


    }
}

出力:

key4

Java の map.entrySet() を用いて値から単一のキーを取得する

Java の Map には entrySet() というメソッドがあり、これを使ってマップ要素のセットを作成し、それをループして値を持つキーを取得することができます。

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Map<String, Object> sampleMap = new HashMap<>();
        sampleMap.put("key1", "value1");
        sampleMap.put("key2", "value2");
        sampleMap.put("key3", "value3");
        sampleMap.put("key4", "value4");

        String getKeyFromValue = getSingleKeyFromValue(sampleMap, "value2");
        System.out.println(getKeyFromValue);
    }

    public static <K, V> K getSingleKeyFromValue(Map<K, V> map, V value) {
        for (Map.Entry<K, V> entry : map.entrySet()) {
            if (Objects.equals(value, entry.getValue())) {
                return entry.getKey();
            }
        }
        return null;
    }

出力:

key2

Java のストリーム API を使って値から複数のキーを取得する

値から単一のキーを取得する方法を見たが、Map は単一のキーに複数の値を結びつけることができる。値のすべてのキーを取得するには、Java 8 の Stream API を利用する。

以下の例は getMultipleKeysByValue() メソッドを用いている。そして、結果としてキーのリストを返す。


import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {

        Map<String, Object> sampleMap = new HashMap<>();
        sampleMap.put("key1", "value1");
        sampleMap.put("key2", "value1");
        sampleMap.put("key3", "value2");
        sampleMap.put("key4", "value1");

       List<String> getKeysFromValue = getMultipleKeysByValue(sampleMap, "value1");
        System.out.println(getKeysFromValue);
    }

    public static <String> List<String> getMultipleKeysByValue(Map<String, Object> map, Object value) {
        return map.entrySet()
                .stream()
                .filter(entry -> Objects.equals(entry.getValue(), value))
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());
    }
}

出力:

[key1, key2, key4]

関連記事 - Java Hashmap

  • Java でハッシュマップを JSON オブジェクトに変換する方法
  • 関連記事 - Java Map

  • Java でマップの各要素を反復処理する方法
  • 関連記事 - Java

  • Java でハッシュマップを JSON オブジェクトに変換する方法
  • comments powered by Disqus