我正在使用 Java 8。我有一个包含这些“MyFlatObject”对象的 java.util.List ...
public class MyFlatObject {
private String category;
private String productId;
private String feature;
...
}
我如何将此列表转换为另一个类别对象列表,其中这些对象定义为
public class Category {
private String category;
private List<Product> products;
...
}
public class Product {
private String productId;
private List<String> features;
...
}
?目标是,如果 List
您可能正在寻找的是
Collectors.groupingBy
以及使用 Collectors.mapping
的下游函数。如果我猜对了,您正在寻找按多个属性进行分组并将它们转换为新对象,这就是 Collectors.collectingAndThen
可能会很方便的地方。
假设这些类的 getter 和构造函数很少,该方法可能类似于:
List<Category> categories = flatObjects.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(MyFlatObject::getCategory,
Collectors.collectingAndThen(
Collectors.groupingBy(MyFlatObject::getProductId,
Collectors.mapping(MyFlatObject::getFeature, Collectors.toList())),
val -> val.entrySet()
.stream()
.map(e -> new Product(e.getKey(), e.getValue()))
.toList())),
val -> val.entrySet().stream()
.map(e -> new Category(e.getKey(), e.getValue()))
.toList())
);