2016-03-28 29 views
5

我正在尋找group by的實現,然後根據lambda表達式中的count進行過濾。在java中實現有數組的計數8

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

是否有任何使用lambda表達式實現此目的的簡單實現。

回答

6

您可以組合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返回地圖的可變性沒有保證,所以你可以使用重載版本,並提供一個具體的如果你想要的話,可變實例。

+0

謝謝你的回答 – Patan