Java Flux: groupe une Liste sur une Carte des Cartes

Comment pourrais-je faire ce qui suit avec Java Flux?

Disons que j'ai les classes suivantes:

class Foo {
    Bar b;
}

class Bar {
    String id;
    String date;
}

J'ai un List<Foo> et je veux le convertir en un Map <Foo.b.id, Map<Foo.b.date, Foo>. I. e: groupe, d'abord par le Foo.b.id puis par Foo.b.date.

J'ai du mal avec les 2 étapes, mais le second n'a même pas compiler:

Map<String, List<Foo>> groupById =
        myList
                .stream()
                .collect(
                        Collectors.groupingBy(
                                foo -> foo.getBar().getId()
                        )
                );

Map<String, Map<String, Foo>> output = groupById.entrySet()
        .stream()
        .map(
                entry -> entry.getKey(),
                entry -> entry.getValue()
                        .stream()
                        .collect(
                                Collectors.groupingBy(
                                        bar -> bar.getDate()
                                )
                        )
        );

Merci à l'avance.

Eh bien, êtes-vous sûr que chaque élément de la liste sera unique? C'est, d'un identifiant et d'une date donneront exactement un seul Foo objet?
Voulez-vous un Map <Foo.b.id, Map<Foo.b.date, Foo.b> ou un Map <Foo.b.id, Map<Foo.b.date, List<Foo.b>> ?
vous avez raison, édité 🙂
oui

OriginalL'auteur mrod | 2015-10-21