list集合groupby聚合
时间: 2023-11-09 15:51:49 浏览: 337
C# List多条件聚合查询方法.txt
引用和引用[3]中提到了使用Lambda表达式和Java的Stream API来实现list集合的groupby聚合。在Java中,可以使用`Collectors.groupingBy`方法来进行分组操作。这个方法接受一个分类器函数作为参数,并将集合中的元素按照分类器函数的返回值进行分组。分类器函数可以是一个Lambda表达式或方法引用,用于指定根据哪个属性进行分组。
例如,如果有一个`Product`类,其中包含`category`和`count`两个属性,可以使用以下方式对`Product`集合进行按照`category`属性进行分组:
```
Map<String, List<Product>> groups = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory));
```
这将返回一个`Map`对象,其中键是`category`属性的值,值是具有相同`category`属性的`Product`对象的列表。
如果想要对分组结果进行统计,可以使用`Collectors.summingInt`方法来计算每个分组的总数。例如,可以通过以下方式对`Product`集合按照`category`属性进行分组,并统计每个分组中`count`属性的总和:
```
Map<String, Integer> counts = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory, Collectors.summingInt(Product::getCount)));
```
这将返回一个`Map`对象,其中键是`category`属性的值,值是对应分组中`count`属性的总和。
可以使用`maxBy`方法对分组结果进行筛选,例如查找每个分组中`count`属性最大的产品。可以通过以下方式实现:
```
Map<String, Optional<Product>> maxCounts = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory, Collectors.maxBy(Comparator.comparingInt(Product::getCount))));
```
这将返回一个`Map`对象,其中键是`category`属性的值,值是对应分组中`count`属性最大的`Product`对象的`Optional`包装。
阅读全文