1. 概要

以前のチュートリアルであるJavaHashMap のガイドでは、JavaでHashMapを使用する方法を示しました。

この短いチュートリアルでは、キーのリストに基づいて HashMapからサブマップを取得する方法を学習します。

2. Java8ストリームを使用する

たとえば、HashMapとキーのリストがあるとします。

Map<Integer, String> map = new HashMap<>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(4, "D");
map.put(5, "E");

List<Integer> keyList = Arrays.asList(1, 2, 3);

Java 8ストリームを使用して、keyListに基づくサブマップを取得できます。

Map<Integer, String> subMap = map.entrySet().stream()
  .filter(x -> keyList.contains(x.getKey()))
  .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

System.out.println(subMap);

出力は次のようになります。

{1=A, 2=B, 3=C}

3. reservedAll()メソッドを使用します

マップのkeySetを取得し、 reservedAll()メソッドを使用して、キーがkeyListにないすべてのエントリを削除できます。

map.keySet().retainAll(keyList);

このメソッドは元のマップを編集することに注意してください。 元のマップに影響を与えたくない場合は、最初にHashMapのコピーコンストラクターを使用して新しいマップを作成できます。

Map<Integer, String> newMap = new HashMap<>(map);
newMap.keySet().retainAll(keyList);

System.out.println(newMap);

出力は上記と同じです。

4. 結論

要約すると、キーのリストに基づいて HashMapからサブマップを取得する2つの方法を学びました。