Conversión de mapas a cadenas en Java

1. Información general

En este tutorial, nos centraremos en la conversión de un mapa a una cadena y viceversa.

Primero, veremos cómo lograrlos usando métodos básicos de Java, y luego, usaremos algunas bibliotecas de terceros.

2. Ejemplo de mapa básico

En todos los ejemplos, usaremos la misma implementación de Map :

Map wordsByKey = new HashMap(); wordsByKey.put(1, "one"); wordsByKey.put(2, "two"); wordsByKey.put(3, "three"); wordsByKey.put(4, "four");

3. Convierta un mapa en una cadena iterando

Vamos a iterar sobre todas las claves en nuestro Mapa y, para cada una de ellas, agreguemos la combinación clave-valor a nuestro objeto StringBuilder resultante .

Para propósitos de formato, podemos envolver el resultado entre llaves:

public String convertWithIteration(Map map) { StringBuilder mapAsString = new StringBuilder("{"); for (Integer key : map.keySet()) { mapAsString.append(key + "=" + map.get(key) + ", "); } mapAsString.delete(mapAsString.length()-2, mapAsString.length()).append("}"); return mapAsString.toString(); }

Para comprobar si convertimos nuestro mapa correctamente, ejecutemos la siguiente prueba:

@Test public void givenMap_WhenUsingIteration_ThenResultingStringIsCorrect() { String mapAsString = MapToString.convertWithIteration(wordsByKey); Assert.assertEquals("{1=one, 2=two, 3=three, 4=four}", mapAsString); }

4. Convertir un mapa en una cadena mediante secuencias de Java

Para realizar la conversión mediante transmisiones, primero debemos crear una transmisión a partir de las claves de mapa disponibles .

En segundo lugar, estamos asignando cada clave a una cadena legible por humanos .

Finalmente, estamos uniendo esos valores y, por conveniencia, agregamos algunas reglas de formato usando el método Collectors.joining () :

public String convertWithStream(Map map) { String mapAsString = map.keySet().stream() .map(key -> key + "=" + map.get(key)) .collect(Collectors.joining(", ", "{", "}")); return mapAsString; }

5. Convierta un mapa en una cadena usando Guava

Agreguemos Guava a nuestro proyecto y veamos cómo podemos lograr la conversión en una sola línea de código:

 com.google.guava guava 27.0.1-jre 

Para realizar la conversión usando la clase Joiner de Guava , necesitamos definir un separador entre diferentes entradas del Mapa y un separador entre claves y valores:

public String convertWithGuava(Map map) { return Joiner.on(",").withKeyValueSeparator("=").join(map); }

6. Convertir un mapa en una cadena con Apache Commons

Para usar Apache Commons, primero agreguemos la siguiente dependencia:

 org.apache.commons commons-collections4 4.2 

La unión es muy sencilla, solo necesitamos llamar al método StringUtils.join :

public String convertWithApache(Map map) { return StringUtils.join(map); }

Una mención especial va al método debugPrint disponible en Apache Commons. Es muy útil para depurar errores.

Cuando llamamos:

MapUtils.debugPrint(System.out, "Map as String", wordsByKey);

El texto de depuración se escribirá en la consola:

Map as String = { 1 = one java.lang.String 2 = two java.lang.String 3 = three java.lang.String 4 = four java.lang.String } java.util.HashMap

7. Convertir una cadena en un mapa mediante secuencias

Para realizar la conversión de una cadena a un mapa , definamos dónde dividir y cómo extraer claves y valores:

public Map convertWithStream(String mapAsString) { Map map = Arrays.stream(mapAsString.split(",")) .map(entry -> entry.split("=")) .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1])); return map; }

8. Convierta una cadena en un mapa usando Guava

Una versión más compacta de lo anterior es confiar en Guava para hacer la división y conversión por nosotros en un proceso de una línea:

public Map convertWithGuava(String mapAsString) { return Splitter.on(',').withKeyValueSeparator('=').split(mapAsString); }

9. Conclusión

En este tutorial, vimos cómo convertir un mapa en una cadena y al revés utilizando los métodos principales de Java y las bibliotecas de terceros.

La implementación de todos estos ejemplos se puede encontrar en GitHub.