2016-03-28 15 views
5

私はgroup byの実装を探していますが、それをラムダ式のcountに基づいてフィルタリングしています。java 8でgroup byをcountで実装する

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

ラムダ式を使用してこれを達成する簡単な実装はありますか。あなたがオーバーロードされたバージョンを使用してコンクリートを供給することができますので、ここでは、groupingByによって返されるマップの可変性に保証するものではありません

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; })); 

注:

答えて

6

あなたがcounting()collectingAndThenで、groupingByコレクタを組み合わせることができますあなたが望むならば、変更可能なインスタンス。

+0

ありがとうございます – Patan

関連する問題