java List<object> 分组统计
时间: 2023-11-11 22:02:01 浏览: 67
可以使用Java 8的Stream API来实现分组统计,具体步骤如下:
1. 使用groupBy方法按照指定的属性对List进行分组,生成一个Map对象。
2. 使用map方法对每个分组进行统计,生成一个新的Map对象。
3. 将每个分组的统计结果组合成一个List对象。
示例代码:
```
import java.util.*;
import java.util.stream.Collectors;
public class GroupingExample {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 20),
new Person("Charlie", 30),
new Person("David", 25),
new Person("Eva", 20)
);
// 按照年龄分组,统计每个年龄的人数
Map<Integer, Long> ageCountMap = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
// 将统计结果组合成一个List对象
List<AgeCount> ageCountList = ageCountMap.entrySet().stream()
.map(entry -> new AgeCount(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
// 输出统计结果
System.out.println(ageCountList);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + "(" + age + ")";
}
}
class AgeCount {
private int age;
private long count;
public AgeCount(int age, long count) {
this.age = age;
this.count = count;
}
public int getAge() {
return age;
}
public long getCount() {
return count;
}
@Override
public String toString() {
return age + "岁:" + count + "人";
}
}
```
输出结果:
```
[20岁:2人, 25岁:2人, 30岁:1人]
```
其中Person类表示一个人,包含姓名和年龄两个属性。AgeCount类表示一个年龄和对应的人数。在示例中,我们按照年龄分组统计每个年龄的人数,并将统计结果组合成一个AgeCount对象的List。
阅读全文