【Java】HashMapに格納したオブジェクトでループ (繰り返し) 処理を行う

目的

基本HashMapはキーを指定して、それに対するオブジェクトを取得するという使い方をすると思いますが、Mapの繰り返し処理をしたいケースもあると思います。

今回はHashMapに格納したオブジェクトのループ方法を4種類にまとめたのでこの使い方を書き記します。

今回使用した環境

インターネット接続可能のオンラインの環境

64 ビット オペレーティング システム

Windows 10 22H2

Java 17

ソースコード

以下、文房具クラスです。コード ( キー )、名前、価格のフィールドを持っています。今回はこの文房具クラスのオブジェクトをHashMapに格納し、繰り返し処理を行います。

public class Bunbougu {
    
    private String code; // コード (キー)
    private String name; // 名前
    private int price;   // 価格
    
    @Override
    public String toString() {
        return code + "," + name + "," + String.valueOf(price);
    }
    
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
}

以下がHashMapの繰り返し処理をしているクラスです。4種類の繰り返しをしています。

import java.util.HashMap;
import java.util.Map;

public class MapLoopMain {

    public static void main(String[] args) {

        // 文房具のHashMapを作成
        // ※HashMapに対するキーとBunbouguクラスのキーは同じとしています
        var bunbouguMap = new HashMap<String, Bunbougu>();
        bunbouguMap.put("0001", new Bunbougu() {{
            setCode("0001");setName("色鉛筆");setPrice(300);
        }});
        bunbouguMap.put("0002", new Bunbougu() {{
            setCode("0002");setName("消しゴム");setPrice(150);
        }});
        bunbouguMap.put("0003", new Bunbougu() {{
            setCode("0003");setName("鉛筆");setPrice(50);
        }});
        bunbouguMap.put("0004", new Bunbougu() {{
            setCode("0004");setName("赤鉛筆");setPrice(100);
        }});
        
        // 1. MapのkeySet(キー)で繰り返し
        for (String key : bunbouguMap.keySet()) {
            System.out.println(key);
        }
        
        System.out.println(""); // 行間を空ける
        
        // 2. Mapのvalues(Bunbouguクラスのオブジェクト)で繰り返し
        for (Bunbougu bunbougu : bunbouguMap.values()) {
            System.out.println(bunbougu.toString());
        }
        
        System.out.println(""); // 行間を空ける

        // 3. MapのentrySet(キーとBunbouguクラスのオブジェクトの両方)で繰り返し
        for (Map.Entry<String, Bunbougu> entry : bunbouguMap.entrySet()) {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue().toString());
        }
        
        System.out.println(""); // 行間を空ける

        // 4. forEachラムダ式で繰り返し
        bunbouguMap.forEach((key, value) -> {
            System.out.println(key);
            System.out.println(value.toString());
        });
    }
}

動作確認

実行結果は以下となりました。4種類の繰り返し処理の結果が出力されています。

見ての通り、HashMapは追加した順番は保証されていません。もし追加した順番で繰り返し処理をしたい場合、LinkedHashMapを使用する必要があります。


以上となります。

ここまでお読みいただきありがとうございました。

Java

Posted by だゆう