【发布时间】:2011-11-15 13:22:38
【问题描述】:
我编写了一个简单的函数来为我打印它,但我想知道是否有更简单的方法。
我基本上是在寻找可以打印键(Strings)和值(String 数组)的东西,就好像我在值上调用了Arrays.toString()。
【问题讨论】:
标签: java arrays pretty-print
我编写了一个简单的函数来为我打印它,但我想知道是否有更简单的方法。
我基本上是在寻找可以打印键(Strings)和值(String 数组)的东西,就好像我在值上调用了Arrays.toString()。
【问题讨论】:
标签: java arrays pretty-print
这个网站有两个有趣的方法:http://www.vineetmanohar.com/2010/05/2-ways-to-convert-java-map-to-string/
第一个(一些代码)将以 key=value @ key2 = value2 & ... 格式为您提供答案
第二个会给你一个包含信息的 XML
【讨论】:
一个老问题,但对只使用 Google Guava 等核心库的人可能有用。
private static <K, V> Map<K, List<V>> asView(Map<K, V[]> map) {
// returns a view of the given map so it's considered cheap during construction
// may be expensive on multiple re-iterations
return transformEntries(map, new EntryTransformer<K, V[], List<V>>() {
@Override
public List<V> transformEntry(K key, V[] value) {
return asList(value);
}
});
// java 8: return transformEntries(map, (k, v) -> asList(v));
}
...
final Map<String, String[]> map = ImmutableMap.of(
"one", new String[] {"a", "b", "c"},
"two", new String[] {"d", "e", "f"},
"three",new String[] {"g", "h", "i"}
);
final Map<String, List<String>> view = asView(map);
System.out.println(map);
System.out.println(view);
样本输出:
{one=[Ljava.lang.String;@4a4e79f1, two=[Ljava.lang.String;@6627e353, three=[Ljava.lang.String;@44bd928a}
{one=[a, b, c], two=[d, e, f], three=[g, h, i]}
注意输出是JDK定义的默认格式化输出。
【讨论】:
如果不编写您自己的函数,我认为这是不可能的,因为 Map 将始终使用其自己的 toString() 方法打印其值,而对于数组,不幸的是,这与 Arrays.toString() 产生的不同。
您可以在 Map 实例中覆盖 Map.toString(),方法是从 AbstractMap.toString() 复制代码,然后在值是数组时添加特殊处理。
【讨论】: