es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir un flujo de mapa en un HashMap en Java.

Tengo una estructura de clase similar a

@Data    
class Permission
    {
      String id;
      Map<String,String> roles;
    }

Tengo una lista de List<Permission> llamada permissions y estoy intentando obtener los roles de tipo Map<String,String> de esta lista utilizando streams de la siguiente manera:

permissions.stream()
                .map(Permission::getRoles) // me está dando un Stream<Map<String,String>>
                .collect()  //¿Cómo recopilarlo en un HashMap?

Para que luego pueda iterar sobre este mapa y obtener un Set<String> que contenga todas las claves de este HashMap. En resumen, el objetivo es:
1) obtener un objeto Permission de esta Lista
2) luego obtener el Map de este objeto
3) y luego poner las claves de todos estos objetos Map en un Set<String> keys de manera que tenga todas las claves de los objetos Map del paso (2)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para recopilar la secuencia de mapas en un hashmap, puedes usar el método toMap() con las funciones de mapeo de clave y valor.
    El mapeo de clave debe devolver el id del objeto Permission, y el mapeo de valor debe devolver los roles del objeto Permission. El código se vería algo así:

    Map<string,></string,><string, string="">> rolesMap = permissions.stream()
        .collect(Collectors.toMap(
            Permission::getId,
            Permission::getRoles
        ));
    

    Luego, para obtener un conjunto de todas las claves de todos los mapas, puedes usar otra operación de transmisión para aplanar las entradas del mapa en una secuencia de claves, y luego recoger esas claves en un conjunto utilizando el colector toSet(). Aquí está el código completo:

    Set<string> allKeys = permissions.stream()
        .map(Permission::getRoles)
        .flatMap(m -> m.keySet().stream())
        .collect(Collectors.toSet());
    

    Esto te dará un conjunto de todas las claves de todos los mapas en la lista de objetos Permission.</string,>

Comments are closed.