Kev*_*vin 1 java java-8 java-stream
我正在尝试按产品类别对Product类的对象列表进行分组。不幸的是,Product类的编写方式是这样的:
class Product {
Map<String, String> property;
}
Run Code Online (Sandbox Code Playgroud)
产品类包含一个属性映射,这些属性之一称为“ ProductType”。例如,地图可以包含:
ProductType : Machine
Price : 1000
Name : Motor Cutter
......
Run Code Online (Sandbox Code Playgroud)
我们有一个产品清单。我在想用ProductType将它们分组为Map<String, List<Product>>使用Java 8的流和lamda表达式的正确方法是什么。
如果将Product类定义为:答案是显而易见的。
class Product {
String ProductType;
Double Price;
String Name;
}
Run Code Online (Sandbox Code Playgroud)
但是有了我们最上面的定义,我不知道如何实现这一点。
有人可以帮忙吗?
您仍然可以使用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")));
Run Code Online (Sandbox Code Playgroud)
我添加了filter避免null在输出中输入键的步骤Map。
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |