使用映射值在Java8中使用流进行分组

使用映射值在Java8中使用流进行分组,java,java-8,java-stream,Java,Java 8,Java Stream,我正在尝试按产品类型对Product类的对象列表进行分组。不幸的是,产品类的编写方式如下: class Product { Map<String, String> property; } 我们有一份产品清单。我在想,使用Java8的流和lamda表达式,按ProductType将它们分组到Map中的正确方法是什么 如果产品类别定义为: class Product { String ProductType; Double Price; String N

我正在尝试按产品类型对Product类的对象列表进行分组。不幸的是,产品类的编写方式如下:

class Product {
    Map<String, String> property;
}
我们有一份产品清单。我在想,使用Java8的流和lamda表达式,按ProductType将它们分组到
Map
中的正确方法是什么

如果产品类别定义为:

class Product {
    String ProductType;
    Double Price;
    String Name;
}
但根据我们在顶部的定义,我不知道如何实现这一点


有人能帮忙吗?

您仍然可以使用
groupingBy

List<Product> products = ... 
Map<String, List<Product>> groups = 
     products.stream()
             .filter(p->p.property.containsKey("ProductType"))
             .collect(Collectors.groupingBy(p->p.property.get("ProductType")));
列出产品=。。。
地图组=
products.stream()
.filter(p->p.property.containsKey(“产品类型”))
.collect(Collectors.groupingBy(p->p.property.get(“ProductType”)));

我添加了
filter
步骤,以避免输出
Map
中的
null
键,您仍然可以使用
groupingBy

List<Product> products = ... 
Map<String, List<Product>> groups = 
     products.stream()
             .filter(p->p.property.containsKey("ProductType"))
             .collect(Collectors.groupingBy(p->p.property.get("ProductType")));
列出产品=。。。
地图组=
products.stream()
.filter(p->p.property.containsKey(“产品类型”))
.collect(Collectors.groupingBy(p->p.property.get(“ProductType”)));

我添加了
filter
步骤,以避免输出
Map
中的
null
键。您可以显示您所做的流吗?您可以显示您所做的流吗?或者使用类似于
groupingBy(p->p.property.getOrDefault(“ProductType”、“**无类型**”)
…或者使用类似于
groupingBy(p->p.property.getOrDefault)的东西(“产品类型”,“无类型**”)