Java - 打印集合中对象的文本表示

时间:2015-05-04 13:10:12

标签: java

我的Map键为String,值为一组对象。

我如何打印出与每个单独的键及其属性相关联的对象?

到目前为止我有这样的事情:

for (String eachKey : aMap.keySet()) {
    System.out.println(eachKey + " :" + aMap.get(eachKey));
}

这只是打印出具有对象标识的密钥。

2 个答案:

答案 0 :(得分:3)

您必须覆盖班级中的toString方法。

E.g:

<强> MyClass的

class MyClass {

    int i = 1;
    String s = "test";

    MyClass(int i, String s) {
        this.i = i;
        this.s = s;
    }

    @Override
    public String toString() {
        return "MyObject [i=" + i + ", s=" + s + "]";
    }

}

以及包含main方法的类:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class A {

    @SuppressWarnings("serial")
    public static void main(String[] args) {
        Map<String, Set<MyClass>> aMap = new HashMap<>();
        aMap.put("firstKey", new HashSet<MyClass>() {
            {
                add(new MyClass(1, "a"));
                add(new MyClass(2, "b"));
            }
        });
        aMap.put("secondKey", new HashSet<MyClass>() {
            {
                add(new MyClass(3, "c"));
            }
        });
        for (String eachKey : aMap.keySet()) {
            System.out.println(eachKey + " :" + aMap.get(eachKey));
        }
    }

}

输出将是:

firstKey :[MyObject [i=2, s=b], MyObject [i=1, s=a]]
secondKey :[MyObject [i=3, s=c]]

请注意,您的IDE通常可以为您生成toString方法:

  • Eclipse :来源&gt;生成toString()...
  • IntelliJ IDEA :代码&gt;生成...&gt;的toString()

答案 1 :(得分:1)

覆盖Object类中的toString()方法。 System.out.println()将调用对象的toString(),如果你的类中没有定义toString()方法,Object类只会打印classname @。