Java ハッシュマップで値からキーを取得する方法
-
Java で
BidiMap
を使って値から単一のキーを取得する -
Java の
map.entrySet()
を用いて値から単一のキーを取得する - Java のストリーム API を使って値から複数のキーを取得する
ハッシュマップは Java には欠かせないもので、キーと値のペアメソッドを使用することで、データを柔軟に扱う力を与えてくれます。値にはキーが付いているので、そのキーを使って簡単に値を求めることができます。しかし、値からキーを取得したい場合はどうでしょうか?
ここではそれについて説明します。私たちの目的は、値にアタッチされているキーを取得することです。
Java で BidiMap
を使って値から単一のキーを取得する
双方向マップを使用して、その値を使用してキーを取得することができます。双方向性マップは、マップ内に重複した値が存在しないことを保証し、その値を使って鍵を取得できることを保証します。双方向性マップ BidiMap
は Apache 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]
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn