我正在寻找group by的实现,拥有然后根据lambda表达式中的count进行过滤.
select COUNT(employee_id),department_id from employee GROUP BY department_id HAVING COUNT(employee_id) > 1
是否有使用lambda表达式实现此目的的简单实现.
解决方法
您可以将groupingBy收集器与counting()和collectAndThen结合使用:
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返回的映射的可变性,因此您可以使用重载版本并提供具体的可变实例(如果需要).