Saltar al contenido

La forma más eficiente de convertir/aplanar todo el mapa a la lista (keys & valores juntos, no por separado)

Te recomendamos que revises esta solución en un ambiente controlado antes de enviarlo a producción, un saludo.

Solución:

Algo como esto:

List> listOflists =
    mapOfMaps.values()
             .stream()
             .map(m -> m.entrySet()
                        .stream()
                        .flatMap(e->Stream.of(e.getKey(),e.getValue()))
                        .collect(Collectors.toList()))
             .collect(Collectors.toList());

Para cada interior Mapfluyes sobre el entrySet()y crear una secuencia de todos los keys y valores, que recopilas en un List.

Por ejemplo, si inicializa el Map con:

Map> mapOfMaps = new HashMap<>();
mapOfMaps.put(1L,new HashMap());
mapOfMaps.put(2L,new HashMap());
mapOfMaps.get(1L).put("key1","value1");
mapOfMaps.get(1L).put("key2","value2");
mapOfMaps.get(2L).put("key3","value3");
mapOfMaps.get(2L).put("key4","value4");

Obtendrás lo siguiente List:

[[key1, value1, key2, value2], [key3, value3, key4, value4]]

A continuación se muestra mi versión de la solución. Puede iterar sobre la entrada y agregar valores a la lista deseada en consecuencia.

        List> list = map.
                values()
                .stream()
                .map(value -> 
                    List list1 = new ArrayList<>();
                    for (Map.Entry entry : value.entrySet()) 
                        list1.add(entry.getKey());
                        list1.add(entry.getValue());
                    
                    return list1;
                )
                .collect(Collectors.toList());

Entrada de prueba:


        Map> map = new HashMap<>();

        Map submap1 = new HashMap<>();
        submap1.put("test", "test2");

        Map submap2 = new HashMap<>();
        submap2.put("test6", "6");

        map.put(1l, submap1);
        map.put(2l, submap2);


valoraciones y reseñas

Si te gustó nuestro trabajo, tienes la libertad de dejar una noticia acerca de qué le añadirías a esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *