Реализация наличия count с group by в java 8
Я ищу реализацию group by, имеющую, а затем фильтрую на основе count в лямбда-выражениях.
select COUNT(employee_id), department_id from employee
GROUP BY department_id
HAVING COUNT(employee_id) > 1
есть ли простая реализация достижения этого с помощью лямбда-выражений.
1 ответов
вы можете комбинировать groupingBy
коллектор, с counting()
и collectingAndThen
:
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
...
Map<Long, Long> map =
employees.stream()
.collect(collectingAndThen(groupingBy(Employee::getDeptId, counting()),
m -> { m.values().removeIf(v -> v <= 1L); return m; }));
обратите внимание, что здесь нет гарантии на изменчивость карты, возвращаемой groupingBy
, поэтому вы можете использовать перегруженную версию и предоставить конкретный изменяемый экземпляр, если хотите.