1. ホーム
  2. java

[解決済み] Javaでマップをプリティプリントする

2022-05-01 03:35:58

質問

をきれいに印刷する方法を探しています。 Map .

map.toString() は私に与えてくれます。 {key1=value1, key2=value2, key3=value3}

マップの入力値にもっと自由度が欲しいので、以下のようなものを探しています。 key1="value1", key2="value2", key3="value3"

こんな小さなコードを書きました。

StringBuilder sb = new StringBuilder();
Iterator<Entry<String, String>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Entry<String, String> entry = iter.next();
    sb.append(entry.getKey());
    sb.append('=').append('"');
    sb.append(entry.getValue());
    sb.append('"');
    if (iter.hasNext()) {
        sb.append(',').append(' ');
    }
}
return sb.toString();

しかし、もっとエレガントで簡潔な方法があるはずです。

どのように解決するのですか?

または、ロジックを整然とした小さなクラスにまとめる。

public class PrettyPrintingMap<K, V> {
    private Map<K, V> map;

    public PrettyPrintingMap(Map<K, V> map) {
        this.map = map;
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        Iterator<Entry<K, V>> iter = map.entrySet().iterator();
        while (iter.hasNext()) {
            Entry<K, V> entry = iter.next();
            sb.append(entry.getKey());
            sb.append('=').append('"');
            sb.append(entry.getValue());
            sb.append('"');
            if (iter.hasNext()) {
                sb.append(',').append(' ');
            }
        }
        return sb.toString();

    }
}

使用方法

Map<String, String> myMap = new HashMap<String, String>();

System.out.println(new PrettyPrintingMap<String, String>(myMap));

注:このロジックは、ユーティリティ・メソッドに入れることもできます。