Java 整数流

标签 java arrays list stream java-stream

我是一名相当新的 Java 程序员,目前正在学习流。我正在尝试使用流来获取每个部门的工资并对其进行平均。我已经能够添加工资或平均工资,但我不知道如何按部门执行此操作。 这是我到目前为止所拥有的代码。

 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;


public class AverageSalariesDept {

public static void main(String[] args) {


  Employee[] employees = {
     new Employee("Jason", "Red", 5000, "IT"),
     new Employee("Ashley", "Green", 7600, "IT"),
     new Employee("Matthew", "Indigo", 3587.5, "Sales"),
     new Employee("James", "Indigo", 4700.77, "Marketing"),
     new Employee("Luke", "Indigo", 6200, "IT"),
     new Employee("Jason", "Blue", 3200, "Sales"),
     new Employee("Wendy", "Brown", 4236.4, "Marketing")};


  List<Employee> list = Arrays.asList(employees);

  Function<Employee, String> byDepartment = Employee::getDepartment;
  Function<Employee, Double> bySalary = Employee::getSalary;

  Comparator<Employee> compSalaries = 
  Comparator.comparing(byDepartment).thenComparing(bySalary);

  list.stream()
           .sorted(compSalaries)  
           .forEach(System.out::println);


   System.out.printf("Average of Employees' salaries: %.2f%n",
     list.stream()
         .mapToDouble(Employee::getSalary)
         .average()
         .getAsDouble());



 }
 }

最佳答案

这就是您所需要的。

Map<String, Double> avgSalByDept = Arrays.stream(employees).
    collect(Collectors.groupingBy(Employee::getDepartment, 
        Collectors.averagingDouble(Employee::getSalary)));

首先使用groupingBy收集器按部门对Employees进行分组。然后使用下游collector计算每个部门/组的平均工资。

关于Java 整数流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52574749/

相关文章:

python - 在列表 A 中找到第一个索引,其中值在列表 B 中

java - jar 不会使用 eclipse keplar 自动部署在 tomcat 中

java - Hibernate 源代码中的 volatile 屏障将为 "syncs state with other threads"。如何?

java - 为什么这个 map.put() 会覆盖现有的值事件,尽管 map.containskey() 返回 false?

c - 三重指针、数组和 malloc

java - 在 Java 中查找命理数字

list - 在序言中对原子进行排序

xml - 列表应该如何用 XML 表示?

java - 将特定格式的多个输入作为 java 中的单个输入

c - 二维数组 rand 函数乘法