5 Stimmen

Einfache Möglichkeit, eine String-Darstellung von Map<String, String[]> in Java zu erhalten?

Ich habe eine einfache Funktion kodiert, die es für mich druckt, aber ich habe mich gefragt, ob es einen einfacheren Weg gibt.

Im Grunde suche ich etwas, das die Schlüssel ausdruckt ( String s) und die Werte ( String Arrays), als ob ich aufrufe Arrays.toString() auf die Werte.

3voto

woliveirajr Punkte 9353

Diese Seite hat zwei interessante Methoden: http://www.vineetmanohar.com/2010/05/2-ways-to-convert-java-map-to-string/

Die erste (etwas Code) wird Ihnen eine Antwort im Format Schlüssel=Wert @ Schlüssel2 = Wert2 & ... geben.

Mit der zweiten erhalten Sie eine XML-Datei mit den Informationen

1voto

Lyubomyr Shaydariv Punkte 19219

Eine alte Frage, aber vielleicht nützlich für jemanden, der nur Core-Libs wie Google Guava verwendet.

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);

Beispielhafte Ausgabe:

{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]}

Beachten Sie, dass es sich bei der Ausgabe um eine vom JDK definierte, standardmäßig formatierte Ausgabe handelt.

0voto

drmirror Punkte 3620

Ich glaube nicht, dass dies möglich ist, ohne eine eigene Funktion zu programmieren, da die Map ihre Werte immer mit ihren eigenen toString()-Methoden ausgibt, und für ein Array ist das leider etwas anderes als das, was Arrays.toString() erzeugt.

Sie können Map.toString() in Ihrer Map-Instanz außer Kraft setzen, indem Sie den Code von AbstractMap.toString() kopieren und dann die spezielle Behandlung hinzufügen, wenn der Wert ein Array ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X