Mapper vers une chaîne en Java

88

Quand je le fais System.out.println(map)en Java, j'obtiens une belle sortie dans stdout. Comment puis-je obtenir cette même représentation sous forme de chaîne de a Mapdans une variable sans se mêler de la sortie standard? Quelque chose comme String mapAsString = Collections.toString(map)?

Dan
la source

Réponses:

141

Utilisez Object#toString().

String string = map.toString();

C'est après tout aussi ce que System.out.println(object)fait sous les capots . Le format des cartes est décrit dans AbstractMap#toString().

Renvoie une représentation sous forme de chaîne de cette carte. La représentation sous forme de chaîne consiste en une liste de mappages clé-valeur dans l'ordre renvoyé par l' entrySetitérateur de la vue de la carte , entre accolades ("{}"). Les mappages adjacents sont séparés par les caractères "," (virgule et espace). Chaque mappage clé-valeur est rendu comme la clé suivie d'un signe égal ("=") suivi de la valeur associée. Les clés et les valeurs sont converties en chaînes comme par String.valueOf(Object).

BalusC
la source
3
Appuyer sur F3 sur la méthode Map toString () est trompeur! Vous amène directement à Object.toString () - devrait réfléchir avant d'engager F3
Adam
2
@Adam, c'est parce que vous appelez toString () sur l'interface, où cette méthode, bien sûr, n'est pas définie. Votre IDE ne connaît pas la mise en œuvre réelle au moment de l'exécution. Vous ne devriez pas la blâmer.
Victor Dombrovsky
@VictorDombrovsky Tout IDE à moitié décent (par exemple IntelliJ, Eclipse, etc.) devrait être capable de retracer l'implémentation réelle d'une méthode définie dans une interface.
wheeler
@wheeler toString()n'est pas déclaré dans Mapet s'il l'était: Mapa 21 classes d'implémentation. Lequel d'entre eux doit être préféré aux autres lorsque l'implémentation réellement utilisée n'est connue qu'au moment de l'exécution?
Gerold Broser le
Mais les valeurs clés ne sont pas entre guillemets, donc pas un JSON valide si quelqu'un essaie de l'utiliser comme JSON
P Satish Patro
11

Vous pouvez également utiliser la classe Joiner google-collections (goyave) si vous souhaitez personnaliser le format d'impression

Aravind Yarram
la source