Mam listę pojos, które chcę wykonać niektóre grupy na. Coś jak:Java 8 grupowanie lambd przez wiele pól
public class Pojo {
private final Category category;
private final BigDecimal someValue;
}
public class Category {
private final String majorCategory;
private final String minorCategory;
}
chcę Map<String, Map<String, List<Pojo>>>
gdzie kluczem jest majorCategory
a wartość jest Map
z klucza minorCategory
i wartości to List
z Pojo
obiektów dla powiedział minorCategory
.
Zamierzam użyć Javy 8 lambdas, aby to osiągnąć. Mogę dostać pierwszy poziom grupowania zrobić z następujących powodów:
Map<String, Pojo> result = list
.stream()
.collect(groupingBy(p -> p.getCategory().getMajorCategory()));
Jak mogę teraz grupa ponownie minorCategory
i uzyskać Map<String, Map<String, List<Pojo>>>
pragnę?
Aktualizacja
Pierwsza odpowiedź jest prawidłowy dla przykładu przewidzianego początkowo, jednak ja od zaktualizowane pytanie. Komentarz Rubena w zaakceptowanej odpowiedzi stanowi ostatni element układanki.
Dziękuję za to, działa to na przykład w moim pytaniu, ale mogę mieć uproszczone. Właściwie grupuję się na polu na obiekcie zawartym w mojej pojo, nazwanej, powiedzmy, kategorii. Próbowałem '.collect (groupingBy (p -> p.getCategory(). GetMajorCategory(), groupingBy (p -> p.getCategory(). GetMinorCategory())))' ale nie przecina musztardy. Czy masz jakieś pomysły? ' –
@RobertBain list.stream(). Collect (groupingBy ((Pojo p) -> p.getCategory(). GetMajorCategory(), groupingBy ((Pojo p) -> p.getCategory(). getMinorCategory()))); – Ruben
Jaka jest różnica między wszystkimi odpowiedziami ...? –