Java用stream分组排序,给定一个list集合中存放map元素,每个map元素中存放有三个元素,分别是工资姓名年龄,如何统计出这个list中相同年龄和工资的人
时间: 2024-10-25 08:18:15 浏览: 9
Java判断List中相同值元素的个数实例
在Java中,你可以使用Stream API对集合进行分组并按特定键值进行排序。对于你提到的情况,首先需要将Map转换为包含姓名的Person对象,然后基于年龄和工资两个字段分组。假设有一个Person类,你可以这样做:
```java
import java.util.*;
import java.util.stream.Collectors;
class Person {
String name;
int salary;
int age;
// 构造函数、getter和setter省略...
}
List<Map<String, Object>> mapList = ...; // 假设这是你的原始列表
// 将Map转换为Person对象列表
List<Person> personList = mapList.stream()
.map(map -> {
String name = (String) map.get("name");
int salary = ((Number) map.get("salary")).intValue();
int age = ((Number) map.get("age")).intValue();
return new Person(name, salary, age);
})
.collect(Collectors.toList());
// 按照年龄和工资分组并计数
Map<SortedMap<Integer, Integer>, Long> groupCount = personList.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.collectingAndThen(Collectors.toMap(
person -> person.getSalary(),
Function.identity(),
(v1, v2) -> Math.max(v1, v2)), // 使用最大值合并同工资的人
Collectors.counting())));
// 输出结果
groupCount.forEach((ageSalaryGroup, count) -> System.out.println("Age: " + ageSalaryGroup.firstKey() +
", Salary: " + ageSalaryGroup.lastKey() +
", Count: " + count));
```
阅读全文