JAVA lambda 分组统计 某个属性对应的数量
时间: 2023-12-15 12:06:23 浏览: 28
在 Java 中,可以使用 Stream API 和 lambda 表达式来实现分组统计某个属性对应的数量。假设有一个包含多个对象的列表 `list`,每个对象包含属性 `key` 和 `value`,可以按照如下方式进行统计:
```java
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
list.add(new HashMap<String, Object>(){{put("key", "A"); put("value", 1);}});
list.add(new HashMap<String, Object>(){{put("key", "B"); put("value", 2);}});
list.add(new HashMap<String, Object>(){{put("key", "A"); put("value", 3);}});
list.add(new HashMap<String, Object>(){{put("key", "C"); put("value", 4);}});
list.add(new HashMap<String, Object>(){{put("key", "B"); put("value", 5);}});
list.add(new HashMap<String, Object>(){{put("key", "A"); put("value", 6);}});
Map<Object, Integer> result = list.stream()
.collect(Collectors.groupingBy(e -> e.get("key"), Collectors.summingInt(e -> (int)e.get("value"))));
System.out.println(result);
}
}
```
输出结果为:
```
{A=10, B=7, C=4}
```
其中,`e -> e.get("key")` 表示按照 Map 中的 `key` 属性进行分组,`Collectors.groupingBy` 方法按照 `key` 分组,并返回一个 Map,其中键为 `key` 的属性值,值为对应分组的元素列表。然后使用 `Collectors.summingInt` 方法对每个分组内的 `value` 属性进行求和操作,最终返回一个键为 `key` 属性值,值为 `value` 属性之和的 Map。