📜  Java|带有示例的收集器 averagingLong (ToLongFunction mapper)(1)

📅  最后修改于: 2023-12-03 15:31:49.060000             🧑  作者: Mango

Java|带有示例的收集器 averagingLong (ToLongFunction mapper)

在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.groupingByCollectors.averagingLongJava 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 来分组和求平均值,并可以通过我们提供的示例进行实现。