覆盖Multimap的一个特定实例的toString()?

时间:2013-06-21 17:45:41

标签: java hashmap tostring

我有一个ListMultimap(Guava)的实例,它由嵌套的HashMaps和相当复杂的对象组成 - 有什么办法可以在打印HashMap时更改此实例的toString()以自定义控制台输出?或者是创建一个新类的唯一方法,该类是HashMap类的扩展,并重写toString()方法,如下所示:

class CustomizedListMultiMap extends ListMultiMap<myComplexDatatypeOne, myComplexDatatypeTwo> {
    // overwriting toString
    public String toString() {
        // my custom implementation
    }
}

Multimaps实例化如下:

ListMultimap<datatypeOne, datatypeTwo> map = ArrayListMultimap.create();

所以我不认为第一个答案适用? (谢谢。)

3 个答案:

答案 0 :(得分:4)

匿名班怎么样:

Map<X, Y> map = new HashMap<X, Y>() {
    @Override
    public String toString() {
        // toString implementation here
    }
};

编辑:您希望使用final课程执行此操作。我建议写一个单独的static toString方法并调用它,而不是试图将它添加到类本身:

public static String mapToString(Map<X, Y> map) {
    // toString implementation here
} 

答案 1 :(得分:1)

我的印象是你有一个ListMultimap<Foo, List<Bar>>,并且你希望以与{a=[1, 2, 3]}的长度相对应的List<Bar>格式打印出来。

最简单的方法可能是

Multimaps.transformValues(multimap, new Function<List<Bar>, Integer>() {
   public Integer apply(List<Bar> list) {
     return list.size();
   }
}).toString();

答案 2 :(得分:0)

您必须覆盖自定义类“customizedHashMap”中的toString()方法。您不能仅为类的一个实例自定义toString()方法。

我建议您使用首字母大写的类名!