lambda在java8中用groupby实现计数

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

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

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

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

z9zf31ra

z9zf31ra1#

你可以把 groupingBy 收集器,带 counting() 以及 collectingAndThen :

  1. import static java.util.stream.Collectors.collectingAndThen;
  2. import static java.util.stream.Collectors.counting;
  3. import static java.util.stream.Collectors.groupingBy;
  4. ...
  5. Map<Long, Long> map =
  6. employees.stream()
  7. .collect(collectingAndThen(groupingBy(Employee::getDeptId, counting()),
  8. m -> { m.values().removeIf(v -> v <= 1L); return m; }));

注意,这里不能保证 groupingBy ,因此可以使用重载版本,并根据需要提供具体的可变示例。

相关问题