📅  最后修改于: 2023-12-03 15:31:49.060000             🧑  作者: Mango
在Java 8中, Java集合框架新增了一组Collector接口来实现可变更新累加器的用途。其中之一是带有示例的收集器averagingLong(ToLongFunction mapper)
。它允许程序员将收集到的元素转换为long类型,然后计算它们的平均值。
public static <T> Collector<T, ?, Double> averagingLong(ToLongFunction<? super T> mapper)
averagingLong
的参数是一个ToLongFunction
类型的映射函数。 它将类T的实例映射到long值并对其进行求均值。
在下面的示例中,我们将使用 averagingLong
来计算员工列表中每个部门的平均薪水。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Employee {
private String name;
private int age;
private String department;
private long salary;
public Employee(String name, int age, String department, long salary) {
this.name = name;
this.age = age;
this.department = department;
this.salary = salary;
}
public static void main(String[] args) {
List<Employee> employees = Arrays.asList(
new Employee("张三", 26, "IT", 6000),
new Employee("李四", 32, "HR", 8000),
new Employee("王五", 41, "Finance", 12000),
new Employee("赵六", 28, "IT", 7500),
new Employee("钱七", 37, "Finance", 9000)
);
Map<String, Double> averageSalaryByDepartment = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.averagingLong(Employee::getSalary)));
System.out.println(averageSalaryByDepartment);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getDepartment() {
return department;
}
public long getSalary() {
return salary;
}
}
在以上示例中,我们首先创建了一个Employee
类,然后使用Collectors.groupingBy
和Collectors.averagingLong
在Java 8
中对员工按部门进行分组并求平均薪水。 最后,我们以一个Map的形式打印出来。
执行以上程序将得到以下结果:
{Finance=10500.0, IT=6750.0, HR=8000.0}
结果表明,在公司的Finance部门中,平均薪水是10500元;IT部门和HR部门的平均工资分别是6750元和8000元。
收集器是 Java 8 中新增的一个重要特性,添加了一组用于对可变更新累加器的用途。收集器averagingLong(ToLongFunction mapper)
是其中之一,在程序员需要对转换为long类型的元素进行平均值计算时,非常有用。通过本文的介绍,您应该已经熟悉如何在Java 8中使用 averagingLong
来分组和求平均值,并可以通过我们提供的示例进行实现。