使用映射值在Java8中使用流进行分组
我正在尝试按产品类型对Product类的对象列表进行分组。不幸的是,产品类的编写方式如下:使用映射值在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
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)的东西(“产品类型”,“无类型**”)
…