Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
Cómo convertir un Map<String,List<String>> a Map<String,Set<String>> usando la operación forEach

Quiero convertir Map<String,List<String>> a Map<String,Set<String>> para una búsqueda optimizada. Se me ocurrió el siguiente enfoque tradicional.

 for (Map.Entry<String, List<String>> entry : this.mapWithList.entrySet()) { Set<String> hSet = new HashSet<>(entry.getValue()); this.mapWithSet.put(entry.getKey(), hSet); }

Me pregunto cómo puedo hacerlo usando forEach en Java 8 .

Además, con forEach lambda, ¿será mejor con el rendimiento del código?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¿Será mejor con el rendimiento del código?

No, no lo hará. Las soluciones iterativas suelen ser más eficaces.

¿Cómo puedo hacerlo usando forEach

Hay una operación especial de collect() en la API de transmisión que está destinada a llenar un contenedor mutable (por ejemplo, Collection , StringBuilder , etc.) con el contenido de la canalización de transmisión. La documentación desaconseja encarecidamente el uso de forEach() para ese propósito. Considere utilizar forEach() solo como último recurso , cuando no haya otra forma de lograrlo.

Para hacer eso con collect() , primero necesita crear una secuencia de entradas .

En función de cada entrada , se debe crear una nueva entrada , la operación map() se utiliza para ese propósito. El método estático Map.entry() se usa para instanciar una nueva entrada.

Y luego aplique la operación de terminal collect() pasando Collectors.toMap() como parámetro, que crea un colector ( objeto responsable de colocar los elementos de flujo en un contenedor mutable, un mapa en este caso ) basado en las dos funciones proporcionadas (por claves y valores ).

main()

 public static void main(String[] args) { Map<String,List<String>> mapWithList = Map.of("1", List.of("1", "2", "3")); Map<String,Set<String>> result = mapWithList.entrySet().stream() .map(entry -> Map.entry(entry.getKey(), new HashSet<>(entry.getValue()))) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); System.out.println(result); }

Producción

 {1=[1, 2, 3]}
over 4 years ago · Santiago Trujillo Denunciar

0

Puede utilizar este enfoque:

 public static void main(String[] args) { Map<String, List<String>> inputMap = new HashedMap<>(); List<String> a = new ArrayList<>(); a.add("a1"); a.add("a2"); inputMap.put("a", a); List<String> b = new ArrayList<>(); b.add("b1"); b.add("b2"); inputMap.put("b", b); System.out.println(inputMap); Map<String, Set<String>> resultSet= inputMap.entrySet().stream() .collect(Collectors.toMap(Entry::getKey, e -> new HashSet<>(e.getValue()))); System.out.println(resultSet); }
over 4 years ago · Santiago Trujillo Denunciar

0

solución de una línea usando gson! (o cualquier otro serializador JSON)

 Map<String, Set<String>> result = gson.fromJson(gson.toJson(otherMap), Map.class);

ambos mapas tienen la misma representación JSON. piensa fuera de la caja ;)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda