Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

231
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!