【发布时间】:2019-10-20 18:12:45
【问题描述】:
我有一个产品类:
class Product {
String name;
List<Group> group;
//more fields, getters, setters
public Product(String name, Group... group) {
this.name = name;
this.group = Arrays.asList(group);
}
}
其中 Group 是一个枚举
public enum Group {
LEISURE,
SPORT,
FORMALATTIRE,
BABY,
MATERNITY
//...
}
从我想创建一个Map<Group,List<Product>>的产品列表中@
示例输入:
List<Product> productList = new ArrayList<>();
productList.add(new Product("A", Group.BABY, Group.MATERNITY));
productList.add(new Product("B", Group.BABY, Group.LEISURE, Group.SPORT));
productList.add(new Product("C", Group.SPORT, Group.LEISURE));
productList.add(new Product("D", Group.LEISURE, Group.SPORT, Group.FORMALATTIRE));
productList.add(new Product("E", Group.SPORT, Group.LEISURE));
productList.add(new Product("F", Group.FORMALATTIRE, Group.LEISURE));
如果组是一个单一的字段,就像我可以做的名字一样:
productList.stream().collect(Collectors.groupingBy(Product::getName));
我如何使用List<Group> 做到这一点?
预期结果如下所示,其中对于 productList 中存在的每个组,映射到在其字段中具有该组的产品列表 group
{MATERNITY=[A], FORMALATTIRE=[D, F], LEISURE=[B, C, D, E, F], SPORT=[B, C, D, E], BABY=[A, B]}
【问题讨论】:
标签: java java-stream grouping