Простой способ получить строковое представление Mapв Яве? - PullRequest
5 голосов
/ 12 сентября 2011

Я написал простую функцию, которая печатает ее для меня, но мне было интересно, есть ли более простой способ.

Я в основном ищу что-то, что будет печатать ключи (String s) и значения (String массивы), как если бы я вызывал Arrays.toString() для значений.

Ответы [ 3 ]

3 голосов
/ 12 сентября 2011

у этого сайта есть два интересных метода: http://www.vineetmanohar.com/2010/05/2-ways-to-convert-java-map-to-string/

Первый (некоторый код) даст вам ответ в формате ключ = значение @ ключ2 = значение2 & ...

Второй даст вам XML с информацией

1 голос
/ 09 июля 2014

Старый вопрос, но, возможно, полезный для тех, кто использует основные библиотеки только как 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.

0 голосов
/ 12 сентября 2011

Я не думаю, что это возможно без кодирования вашей собственной функции, поскольку Map всегда будет печатать свои значения, используя свои собственные методы toString (), а для массива это, к сожалению, отличается от того, что производит Arrays.toString ().

Вы можете переопределить Map.toString () в вашем экземпляре Map, скопировав код из AbstractMap.toString (), а затем добавив специальную обработку, если значение является массивом.

...