Java8 Stream 强大功能之统计、汇总、多字段分组和多个列汇总统计【含面试题】
class Product {
private String category;
private String name;
private int price;
private int quantity;
// 省略构造函数和 Getter/Setter 方法
@Override
public String toString() {
return "Product{" +
"category='" + category + '\'' +
", name='" + name + '\'' +
", price=" + price +
", quantity=" + quantity +
'}';
}
}
List<Product> products = Arrays.asList(
new Product("Electronics", "Laptop", 2500, 5),
new Product("Electronics", "Phone", 800, 3),
new Product("Clothing", "Shirt", 40, 10),
new Product("Clothing", "Pants", 60, 8),
new Product("Books", "Java in Action", 50, 15),
new Product("Books", "Clean Code", 80, 12)
);
Map<String, IntSummaryStatistics> statsByCategory = products.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.summarizingInt(Product::getQuantity)