在java中获取Map <string,string [] =“”>的字符串表示的简单方法?</string,>

时间:2011-09-12 18:02:45

标签: java arrays pretty-print

我已编写了一个简单的函数,可以为我打印,但我想知道是否有更简单的方法。

我基本上正在寻找可以打印键(String s)和值(String数组)的内容,就像我在值上调用了Arrays.toString()一样。

3 个答案:

答案 0 :(得分:3)

这个网站有两个有趣的方法:http://www.vineetmanohar.com/2010/05/2-ways-to-convert-java-map-to-string/

第一个(某些代码)将以key = value @ key2 = value2&amp;的格式给出答案。 ...

第二个将为您提供包含信息的XML

答案 1 :(得分:1)

一个老问题,但对于使用像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定义的默认格式化输出。

答案 2 :(得分:0)

我不认为如果没有编写自己的函数,这是可能的,因为Map总是使用自己的toString()方法打印它的值,而对于一个数组,不幸的是它与Arrays.toString()产生的不同。

您可以通过从AbstractMap.toString()复制代码,然后在值为数组时添加特殊处理来覆盖Map实例中的Map.toString()。