Java 8 lambdas按多个字段分组

时间:2015-06-12 16:44:19

标签: java java-8 java-stream collectors

我有一个pojos列表,我想要执行一些分组。类似的东西:

public class Pojo {
    private final Category category;
    private final BigDecimal someValue;
}

public class Category {
    private final String majorCategory;
    private final String minorCategory;
}

我想要一个Map<String, Map<String, List<Pojo>>>,其中密钥为majorCategory,值为Map,密钥为minorCategory,值为List {{1}所述Pojo的对象。

我打算使用Java 8 lambdas来实现这一目标。我可以通过以下方式完成第一级分组:

minorCategory

我现在如何再次在Map<String, Pojo> result = list .stream() .collect(groupingBy(p -> p.getCategory().getMajorCategory())); 上分组并获得我想要的minorCategory

更新

提供的第一个答案对于最初提供的示例是正确的,但我已经更新了问题。鲁本在接受的答案中发表评论,提供了最后一部分。

1 个答案:

答案 0 :(得分:13)

groupingBy(Pojo::getMajorCategory, groupingBy(Pojo::getMinorCategory))

应该有用吗,我想?