JavaでMapをループする方法

こんにちは、さるまりんです。

Javaの小ネタです。

こんなマップがあります。

Map<String, String> map = Map.of(
    "JPN", "日本",
    "USA", "アメリカ",
    "FRA", "フランス",
    "DEU", "ドイツ",
    "ESP", "スペイン",
    "AUS", "オーストラリア",
    "FIN", "フィンランド",
    "ATA", "南極");

キーが3文字の国コード、値が国名です。

これをループして一つずつ出力していきます。

まずはIteratorを使ってキーで繰り返していく方法です。

Iterator<String> ite = map.keySet().iterator();
while(ite.hasNext()) {
    String key = ite.next();
    System.out.println(key + " -> " + map.get(key));
}

実行すると下が出力されました。

AUS -> オーストラリア
ESP -> スペイン
USA -> アメリカ
DEU -> ドイツ
FRA -> フランス
JPN -> 日本
FIN -> フィンランド
ATA -> 南極

次は拡張for文でやってみます。

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

実行した出力です。

DEU -> ドイツ
USA -> アメリカ
ESP -> スペイン
AUS -> オーストラリア
ATA -> 南極
FIN -> フィンランド
JPN -> 日本
FRA -> フランス

今度はforEachでやってみます。

map.forEach((key, value) -> {
    System.out.println(key + " -> " + value);
});

実行結果は次のとおり。

AUS -> オーストラリア
ATA -> 南極
FIN -> フィンランド
JPN -> 日本
FRA -> フランス
DEU -> ドイツ
USA -> アメリカ
ESP -> スペイン

全て順番は違いますが、「キー -> 値」と表示されていますね。

同じことをするにもいろんな方法がありますね。

ちなみにSortedMapを実装したTreeMapを使うと、出力は全て

ATA -> 南極
AUS -> オーストラリア
DEU -> ドイツ
ESP -> スペイン
FIN -> フィンランド
FRA -> フランス
JPN -> 日本
USA -> アメリカ

と、キーで並んで表示されました。

TreeMapを使ったマップの初期化部分はこちらです。

Map<String, String> map = new TreeMap<String, String>(){{
    put("JPN", "日本");
    put("USA", "アメリカ");
    put("FRA", "フランス");
    put("DEU", "ドイツ");
    put("ESP", "スペイン");
    put("AUS", "オーストラリア");
    put("FIN", "フィンランド");
    put("ATA", "南極");
}};

読んでくださってありがとうございます。

それではまた!