lambda在java8中用groupby实现计数

ntjbwcob  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(1321)

我正在寻找一个组的实现,然后在lambda表达式的计数为基础的过滤器。

select COUNT(employee_id), department_id  from employee
GROUP BY department_id
HAVING COUNT(employee_id) > 1

使用lambda表达式是否有任何简单的实现。

z9zf31ra

z9zf31ra1#

你可以把 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 ,因此可以使用重载版本,并根据需要提供具体的可变示例。

相关问题