Map a String de valores separados por coma en Java

Un Java HashMap es una estructura de datos útil, pero a veces necesitamos convertirlo en una cadena separada por comas para la salida o para usar como entrada en otro sistema.

En este artículo se explican algunas formas de convertir un Map a String de valores separados por coma en Java. En los siguientes ejemplos lo haremos utilizando clases propias de Java, como así también librerías externas.

Convertir Map a String Usando StringBuilder

Si se utiliza Java 1.5 o superior se puede utilizar la clase StringBuilder, cuyos métodos no están sincronizados por lo que desempeña una mejor performance que StringBuffer.

En este ejemplo:

  • Obtenemos una Collection con las values de los ítems del Map, mediante el método Map.values().
  • Iteramos la Collection obtenida en el paso anterior para agregar cada value al StringBuilder mediante el método StringBuilder.append(String).
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class MapAValoresSeparadosPorComaEjemplo1 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("A", "Madrid");
		map.put("B", "Copenhague");
		map.put("C", "Helsinki");
		map.put("D", "Viena");
		map.put("E", "Bruselas");
		map.put("Q", "Luxemburgo");
		map.put("R", "Mónaco");
		map.put("S", "Oslo");
		map.put("W", "Dublin");
		map.put("X", "Budapest");
		map.put("Y", "Roma");

		StringBuilder sb = new StringBuilder();
		Collection<String> col = map.values();
		
		for (String city : col) {
			sb.append(city).append(",");
		}
		
		System.out.println("-> " + sb.deleteCharAt(sb.lastIndexOf(",")).toString());
	}
}

Salida:

-> Madrid,Luxemburgo,Copenhague,Mónaco,Helsinki,Oslo,Viena,Bruselas,Dublin,Budapest,Roma

Usando StringUtils (Apache Commons Lang)

La librería Apache Commons Lang provee clases de utilidad para manipulación de cadenas de texto entre otras funciones. El método StringUtils.join(Iterable, String) facilita la concatenación de los ítems de una lista.

En este ejemplo:

  • Agregamos la librería commons-lang3-2.10 al proyecto.
  • Obtenemos una Collection con los values del Map.
  • Concatenamos los ítems de la Collection obtenida anteriormente usando el método StringUtils.join(Iterable, String).
Map a String commons-lang
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

public class MapAValoresSeparadosPorComaEjemplo2 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("A", "Madrid");
		map.put("B", "Copenhague");
		map.put("C", "Helsinki");
		map.put("D", "Viena");
		map.put("E", "Bruselas");
		map.put("Q", "Luxemburgo");
		map.put("R", "Mónaco");
		map.put("S", "Oslo");
		map.put("W", "Dublin");
		map.put("X", "Budapest");
		map.put("Y", "Roma");
		
		String values = StringUtils.join(map.values(), ",");
		
		System.out.println("-> " + values);
	}
}

Salida:

-> Madrid,Luxemburgo,Copenhague,Mónaco,Helsinki,Oslo,Viena,Bruselas,Dublin,Budapest,Roma

Usando Stream API (Java 8)

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapAValoresSeparadosPorComaEjemplo3 {

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("A", "Madrid");
		map.put("B", "Copenhague");
		map.put("C", "Helsinki");
		map.put("D", "Viena");
		map.put("E", "Bruselas");
		map.put("Q", "Luxemburgo");
		map.put("R", "Mónaco");
		map.put("S", "Oslo");
		map.put("W", "Dublin");
		map.put("X", "Budapest");
		map.put("Y", "Roma");

		String s = map.values().stream().map(Object::toString).collect(Collectors.joining(","));
		
		System.out.println("-> " + s);
	}
}

Salida:

-> Madrid,Luxemburgo,Copenhague,Mónaco,Helsinki,Oslo,Viena,Bruselas,Dublin,Budapest,Roma

Usando Guava

Google Guava es un conjunto de librerías de código abierto para Java que incluye, entre otras, utilidades de concurrencia, hashing, caché, strings, etc.

En este ejemplo:

  • Agregamos la librería guava-29.0-jre al proyecto.
  • Utilizamos la clase Joiner para:
    • Establecer el separador de elementos con el método on(String).
    • Generar el String con el método join(Iterable).
Map a String guava
import java.util.HashMap;
import java.util.Map;

import com.google.common.base.Joiner;

public class MapAValoresSeparadosPorComaEjemplo4 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("A", "Madrid");
		map.put("B", "Copenhague");
		map.put("C", "Helsinki");
		map.put("D", "Viena");
		map.put("E", "Bruselas");
		map.put("Q", "Luxemburgo");
		map.put("R", "Mónaco");
		map.put("S", "Oslo");
		map.put("W", "Dublin");
		map.put("X", "Budapest");
		map.put("Y", "Roma");

		String s = Joiner.on(",").join(map.values());
		
		System.out.println("-> " + s);
	}
}

Salida:

-> Madrid,Luxemburgo,Copenhague,Mónaco,Helsinki,Oslo,Viena,Bruselas,Dublin,Budapest,Roma

Conclusión

En este artículo hemos explorado varias formas de convertir un Java Map en un String de valores separados por coma. Todas estas técnicas pueden ayudarlo a convertir un Java HashMap en una cadena separada por comas y elegir la que mejor se adapte a sus requisitos.

Referencias


Te puede interesar:

Crear un Map de sólo lectura en Java

En este artículo explicamos diferentes formas de crear un java.util.Map inmutable o de solo lectura en Java.

Seguir leyendo →

Cómo ordenar un Map en Java

En este artículo explicamos cómo ordenar los ítems de un Map en Java por la clave o el valor de los ítems.

Seguir leyendo →

Palabras reservadas en Java

Las palabras reservadas en Java son un componente crucial de la sintaxis del lenguaje para formar los bloques básicos del lenguaje.

Seguir leyendo →