2015-05-04 37 views
-2

我有一个Map,其中的键为String,值为一组对象。Java - 打印集合中对象的文本表示

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

我有这样的事情至今:

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

这仅仅打印出与对象身份的关键。

+2

要么为此类重新定义'toString()'(您的IDE可以提出一个默认值)或者定义一个在循环中调用的print()方法,或者使用reflexion以列出每个属性/值。 –

回答

3

您必须重写班级的toString方法。

例如为:

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:源>生成的toString()...
  • IntelliJ IDEA的:代码>生成.. 。> toString()
+0

非常清晰和简洁的解释:)现在设法得到这个工作。 – demonLaMagra

1

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