JavaのストリームのInt

マイケル・フォガティ:

私はかなり新しい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());



 }
 }
ラビンドラRanwala:

これは、何が必要です。

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

最初の使用groupingByグループにコレクタをEmployees部門。その後、下流を使用しcollector、各部署/グループの平均給与を計算します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=203440&siteId=1