Come è possibile eseguire quanto segue con i flussi Java?Stream Java: raggruppare un elenco in una mappa di Maps
diciamo che ho le seguenti classi:
class Foo {
Bar b;
}
class Bar {
String id;
String date;
}
Ho una List<Foo>
e voglio convertirlo in un Map <Foo.b.id, Map<Foo.b.date, Foo>
. I.e: gruppo prima dallo Foo.b.id
e poi da Foo.b.date
.
Sto lottando con il seguente approccio 2-step, ma il secondo non ha nemmeno la compilazione:
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()
)
)
);
Grazie in anticipo.
Bene, sei sicuro che ogni elemento nell'elenco sarà unico? Cioè, un id e una data daranno esattamente un singolo oggetto 'Foo'? – RealSkeptic
Vuoi una 'Mappa' o una 'Mappa >' ? –
assylias
@Eran hai ragione, editato :) – mrod