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.