我有一个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();
所以我不认为第一个答案适用? (谢谢。)
答案 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()方法。
我建议您使用首字母大写的类名!