Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

234
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda