GroupBy una lista de cadenas

Akop:

Tengo esta clase:

class A {
    private List<String> keys;
    private String otherData;
    private int otherDate2;

    // getter and setters for each
}

Para esta clase tengo una simple lista llena de algunos datos. List<A> listOfA. Ahora quiero convertir estos datos a un mapa.Map<String, List<A>>

Actualmente estamos usando un montón de métodos para archivar esto de una manera muy complicada. Creo que podemos resolver con un simple stream()-operación.

He intentado esto

// first
listOfA.stream()
    .collect(Colletors.groupingBy(a -> a.getKeys()))
// produces a Map<String, List<A>>     

// second
listOfA.stream()
    .flatMap(a -> a.getKeys().stream())
    .collect(Colletors.groupingBy(string -> string))
// produces a Map<String, List<String>>

¿Cuál es la manera correcta para esta situación?

Editar: Para que quede claro, yo quiero una Map<String, List<A>>.

Federico Peralta Schaffner:

No es necesario corrientes de esto. Es más fácil de esta manera:

Map<String, List<A>> result = new HashMap<>();

listOfA.forEach(a -> a.getKeys().forEach(key -> 
        result.computeIfAbsent(key, k -> new ArrayList<>()).add(a)));

Este itera listas exterior e interior y llena un Mapuso computeIfAbsent, lo que crea una lista vacía si todavía no existe un valor de la clave dada, entonces Acasos simplemente se añaden a la lista correspondiente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=178015&siteId=1
Recomendado
Clasificación