Zuordnung zu String in Java

88

Wenn ich System.out.println(map)in Java mache , bekomme ich eine schöne Ausgabe in stdout. Wie kann ich dieselbe Zeichenfolgendarstellung von a Mapin einer Variablen erhalten, ohne mich in die Standardausgabe einzumischen? So etwas wie String mapAsString = Collections.toString(map)?

Dan
quelle

Antworten:

141

Verwenden Sie Object#toString().

String string = map.toString();

Das ist nach allem auch , was System.out.println(object)tut die Hauben unter . Das Format für Karten ist in beschrieben AbstractMap#toString().

Gibt eine Zeichenfolgendarstellung dieser Karte zurück. Die Zeichenfolgendarstellung besteht aus einer Liste von Schlüsselwertzuordnungen in der Reihenfolge, die vom entrySetIterator der Kartenansicht zurückgegeben wird , in geschweiften Klammern ("{}"). Benachbarte Zuordnungen werden durch die Zeichen "," (Komma und Leerzeichen) getrennt. Jede Schlüsselwertzuordnung wird als Schlüssel gerendert, gefolgt von einem Gleichheitszeichen ("=") gefolgt vom zugehörigen Wert. Schlüssel und Werte werden wie von in Zeichenfolgen konvertiert String.valueOf(Object).

BalusC
quelle
3
Das Drücken von F3 auf der Map toString () -Methode ist irreführend! Bringt Sie direkt zum Object.toString () - sollte überlegen, bevor Sie F3 aktivieren
Adam
2
@Adam, das liegt daran, dass Sie toString () auf der Schnittstelle aufrufen, wo diese Methode natürlich nicht definiert ist. Ihre IDE kennt die tatsächliche Laufzeitimplementierung nicht. Du solltest sie nicht beschuldigen.
Victor Dombrovsky
@ VictorDombrovsky Jede halbwegs anständige IDE (z. B. IntelliJ, Eclipse usw.) sollte in der Lage sein, die tatsächliche Implementierung einer in einer Schnittstelle definierten Methode aufzuspüren.
Wheeler
@wheeler toString()ist nicht deklariert in Mapund wenn ja : Maphat 21 implementierende Klassen. Welche davon sollten den anderen vorgezogen werden, wenn die tatsächlich verwendete Implementierung nur zur Laufzeit bekannt ist?
Gerold Broser
Die Schlüsselwerte werden jedoch nicht in doppelte Anführungszeichen gesetzt, daher kein gültiger JSON, wenn jemand versucht, ihn als JSON zu verwenden
P Satish Patro
11

Sie können auch die Joiner-Klasse google-collection (Guave) verwenden, wenn Sie das Druckformat anpassen möchten

Aravind Yarram
quelle