Mapa a cadena en Java


88

Cuando lo hago System.out.println(map)en Java, obtengo un buen resultado en stdout. ¿Cómo puedo obtener esta misma representación de cadena de a Mapen una variable sin interferir con la salida estándar? Algo como String mapAsString = Collections.toString(map)?

Respuestas:


141

Utilice Object#toString().

String string = map.toString();

Después de todo, eso es también lo que System.out.println(object)hace bajo las capotas . El formato de los mapas se describe en AbstractMap#toString().

Devuelve una representación de cadena de este mapa. La representación de cadena consta de una lista de asignaciones de clave-valor en el orden devuelto por el entrySetiterador de la vista del mapa , entre llaves ("{}"). Las asignaciones adyacentes están separadas por los caracteres "," (coma y espacio). Cada asignación de clave-valor se representa como la clave seguida de un signo igual ("=") seguido del valor asociado. Las claves y los valores se convierten en cadenas como por String.valueOf(Object).


3
¡Presionar F3 en el método Map toString () es engañoso! Te lleva directamente a Object.toString () - debes pensar antes de participar en F3
Adam

2
@Adam, eso es porque llamas a toString () en la interfaz, donde este método, por supuesto, no está definido. Su IDE no conoce la implementación real en tiempo de ejecución. No deberías culparla.
Victor Dombrovsky

@VictorDombrovsky Cualquier IDE medio decente (por ejemplo, IntelliJ, Eclipse, etc.) debería poder rastrear la implementación real de un método definido en una interfaz.
Wheeler

@wheeler toString()no se declara en Mapy si lo estuviera: Maptiene 21 clases de implementación. ¿Cuál de ellos debería preferirse sobre los demás cuando la implementación realmente utilizada solo se conoce en tiempo de ejecución?
Gerold Broser

Pero los valores clave no se citan dos veces, por lo tanto, no es un JSON válido si alguien intenta usarlo como JSON
P Satish Patro

11

También puede usar la clase de unión de google-collections (guava) si desea personalizar el formato de impresión

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.