2016-03-28 30 views
5

Tôi đang tìm cách triển khai nhóm theo, có và sau đó lọc dựa trên số đếm trong biểu thức lambda.Thực hiện đếm với nhóm theo trong java 8

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

Có cách triển khai đơn giản nào đạt được điều này bằng biểu thức lambda hay không.

Trả lời

6

Bạn có thể kết hợp các nhà sưu tập groupingBy, với 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; })); 

Lưu ý rằng ở đây có đảm bảo trên mutability của bản đồ được trả về bởi groupingBy, vì vậy bạn có thể sử dụng phiên bản quá tải và cung cấp một bê tông ví dụ có thể thay đổi nếu bạn muốn.

+0

Cảm ơn bạn đã trả lời – Patan

Các vấn đề liên quan