Tôi có một danh sách các pojos mà tôi muốn thực hiện một số nhóm. Một cái gì đó như:Nhóm Java 8 lambdas theo nhiều trường
public class Pojo {
private final Category category;
private final BigDecimal someValue;
}
public class Category {
private final String majorCategory;
private final String minorCategory;
}
Tôi muốn có một Map<String, Map<String, List<Pojo>>>
nơi quan trọng là majorCategory
và giá trị là một Map
với phím minorCategory
và giá trị là một List
của Pojo
các đối tượng cho biết minorCategory
.
Tôi định sử dụng Java 8 lambda để đạt được điều này. Tôi có thể lấy cấp độ đầu tiên của nhóm thực hiện với những điều sau đây:
Map<String, Pojo> result = list
.stream()
.collect(groupingBy(p -> p.getCategory().getMajorCategory()));
Làm thế nào tôi có thể bây giờ nhóm lại trên minorCategory
và nhận được Map<String, Map<String, List<Pojo>>>
tôi mong muốn?
Cập nhật
Câu trả lời đầu tiên cung cấp là chính xác cho các ví dụ được cung cấp ban đầu, tuy nhiên tôi đã từ cập nhật các câu hỏi. Lời bình luận của Ruben trong câu trả lời được chấp nhận, cung cấp phần cuối cùng của câu đố.
Cảm ơn điều này, điều này không phù hợp với ví dụ trong câu hỏi của tôi nhưng tôi có thể đã quá đơn giản. Tôi đang thực sự nhóm trên một lĩnh vực trên một đối tượng chứa trong pojo của tôi, được đặt tên, nói, thể loại. Tôi đã thử '.collect (groupingBy (p -> p.getCategory(). GetMajorCategory(), groupingBy (p -> p.getCategory(). GetMinorCategory())))' nhưng nó không cắt mù tạt. Bạn có ý tưởng nào không? ' –
@RobertBain list.stream(). Collect (groupingBy ((Pojo p) -> p.getCategory(). GetMajorCategory(), groupingBy ((Pojo p) -> p.getCategory(). getMinorCategory()))); – Ruben
Sự khác nhau giữa tất cả các câu trả lời là gì ..? –