🛺

【Java】EntryからMapに変換する

2021/10/11に公開

概要

JavaのMapオブジェクトはけっこう使う機会があると思いますが、データをソートして使ったりフィルターしたい時は一度Entryに変換することもあるでしょう。Map→EntryはMapにあるentrySetメソッドを使えば、簡単にできると思います。
あまりケースとしては無いかもしれませんが、その逆でEntry→Mapを簡単に変換する場合にはどうすれば良いのか、というのを今回メモ書きします。

対応方法

Convert Set<Map.Entry<K, V>> to HashMap<K, V>の記事に、いくつか対応方法が紹介されています。
Java9以降限定ですが、Map.ofEntriesのメソッドを使うと簡単に変換できそうですね。このメソッドはEntryの配列からMapのオブジェクトを変換するものです。(ListやSetでEntryを扱ってる場合は、一度配列に変換する必要があります)

実装サンプル

Java9以降を前提とし、Map.ofEntriesを使った実装サンプルです。

public class MapEntryTest {

    public static void main(String[] args) {
        // HashMapの初期化
        Map<Integer, String> testMap = Map.of(
                1, "test1",
                2, "test2",
                3, "test3"
        );
        System.out.println(testMap);
        // Entryへの変換
        Set<Entry<Integer, String>> testEntries = testMap.entrySet();
        System.out.println(testEntries);
        // HashMapへ戻す(Map.ofEntriesはJava9以降で使用可)
        Map<Integer, String> testMap2 = Map.ofEntries(testEntries.toArray(Entry[]::new));
        System.out.println(testMap2);
    }
}

Discussion