Necesito convertir siguiente:
Map<Long,Map<String,String>> mapOfMaps
a
List<List<String>> listOflists
donde las claves de un mapa externo ( mapOfMaps
) son redundantes (para esta operación). Así que, básicamente, sólo puede utilizar mapOfMaps.values().stream()
para empezar.
Y para cada objeto de mapa, por ejemplo:
{ "Manzana": "1", "naranja": "2"}
Necesito convertir a una lista:
{ "Manzana", "1", "naranja", "2"}
¿Cuál es la forma más eficiente de hacer esto?
Ejemplo completo:
{ "1L": { "key1": "valor1", "clave2": "valor2"}, "2L": { "key3": "valor3", "key4": "valor4"}}
Esperado:
[[Key1, valor1, key2, valor2], [key3, value3, key4, valor4]]
Algo como esto:
List<List<String>> 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 interno Map
, permite transmitir sobre el entrySet()
, y crear una corriente de todas las claves y valores, que se recogen en una List
.
Por ejemplo, si inicializar la Map
con:
Map<Long,Map<String,String>> 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á el siguiente List
:
[[key1, value1, key2, value2], [key3, value3, key4, value4]]