W jaki sposób mogę wykonać następujące czynności w przypadku strumieni Java?Strumienie Java: grupuj listę w mapę map
Powiedzmy mam następujące klasy:
class Foo {
Bar b;
}
class Bar {
String id;
String date;
}
Mam List<Foo>
i chcę, aby przekonwertować go na Map <Foo.b.id, Map<Foo.b.date, Foo>
. I.e: najpierw grupa przez Foo.b.id
, a następnie przez Foo.b.date
.
jestem zmaga się z następującym podejściu 2-step, ale drugi nie nawet skompilować:
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()
)
)
);
Z góry dzięki.
Czy na pewno każdy element na liście będzie niepowtarzalny? To znaczy, id i data da dokładnie jeden obiekt 'Foo'? – RealSkeptic
Czy chcesz 'Mapa' lub 'Mapa >' ? –
assylias
@Eran masz rację, edytuj :) – mrod