Распечатать карту с помощью forEach of Stream API - PullRequest
1 голос
/ 07 марта 2020

Я хочу напечатать названия отделов и количество сотрудников, работающих в каждом отделе!

Почему не работает каждый поток?

ArrayList<Employee> list = EmployeeRepository.myList;

public Double getTotalSalary(){

    return list.stream().map(e -> e.getSalary()).reduce(0.0,(s1,s2) -> s1+s2);
}

public void departmentNamesAndEmployeeCount(){
    list.stream().collect(Collectors.groupingBy(Employee::getDepartment,Collectors.counting())).forEach(hm -> system.out::println); /// Compilation Error on this Line.

}

1 Ответ

3 голосов
/ 07 марта 2020

groupingBy возвращает Map<key, value>, чтобы напечатать Карту с forEach:

  1. forEach в вашем случае с Картой, потребовалось BiConsumer ключ двух параметров и значения:
  2. Вы не можете использовать ссылку на метод ::, как и вы, вы должны использовать простой println

Ваш код должен быть:

.forEach((k, v) -> System.out.println(k + " " + v));

В первом методе getTotalSalary, вы просто делаете:

return list.stream()
        .mapToDouble(Employee::getSalary)
        .sum();
...