Java 8 lambdas按多个字段分组
我有一个POJO列表,我想对其执行一些分组。比如:Java 8 lambdas按多个字段分组,java,java-8,java-stream,collectors,Java,Java 8,Java Stream,Collectors,我有一个POJO列表,我想对其执行一些分组。比如: public class Pojo { private final Category category; private final BigDecimal someValue; } public class Category { private final String majorCategory; private final String minorCategory; } 我想要一个Map,其中键是majo
public class Pojo {
private final Category category;
private final BigDecimal someValue;
}
public class Category {
private final String majorCategory;
private final String minorCategory;
}
我想要一个Map
,其中键是majorCategory
,值是一个Map
,键是minorCategory
,值是所述minorCategory
对象的列表
我打算使用Java8Lambdas来实现这一点。我可以通过以下方式完成第一级分组:
Map<String, Pojo> result = list
.stream()
.collect(groupingBy(p -> p.getCategory().getMajorCategory()));
Map结果=列表
.stream()
.collect(分组方式(p->p.getCategory().getMajorCategory());
我现在如何在minorCategory
上再次分组并获得我想要的地图
更新
提供的第一个答案对于最初提供的示例是正确的,但是我已经更新了问题。鲁本在公认答案中的评论提供了谜题的最后一块
groupingBy(Pojo::getMajorCategory, groupingBy(Pojo::getMinorCategory))
我想应该行吗?谢谢你,这对我问题中的例子确实行,但我可能过于简单了。我实际上是在pojo中包含的对象上的一个字段上进行分组,比如说,名为category。我尝试了.collect(groupingBy(p->p.getCategory().getMajorCategory(),groupingBy(p->p.getCategory().getMinorCategory()))
,但它不能切芥末。你有什么想法吗?`@RobertBain list.stream().collect(groupingBy((Pojo p)->p.getCategory().getMajorCategory(),groupingBy((Pojo p)->p.getCategory().getMinorCategory());所有答案之间有什么区别?