import java.util.*;
import java.util.stream.Collectors;
class Employee {
private String name;
private int age;
private double salary;
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
}
public class Main {
public static void main(String[] args) {
List<Employee> employees = Arrays.asList(
new Employee("Alice", 25, 5000.0),
new Employee("Bob", 30, 6000.0),
new Employee("Charlie", 25, 5500.0)
);
Map<Integer, Double> result = employees.stream()
.collect(Collectors.groupingBy(
Employee::getAge,
Collectors.averagingDouble(Employee::getSalary)
));
System.out.println(result);
}
}
实现思路
- 分组与统计:
- 使用
Collectors.groupingBy
方法对employees
列表中的员工对象按年龄进行分组。Collectors.groupingBy
接受两个参数,第一个参数是分组的依据,这里通过Employee::getAge
提取员工的年龄作为分组的键。
- 第二个参数是下游收集器,这里使用
Collectors.averagingDouble
,它的作用是对每个分组中的员工工资进行求平均操作,通过Employee::getSalary
获取每个员工的工资。
- 结果返回:
collect
方法最终返回一个Map<Integer, Double>
,其中键Integer
是员工的年龄,值Double
是对应年龄组员工的平均工资。
- 输出结果:
- 在
main
方法中,将结果打印输出,展示每个年龄组的平均工资。