試圖學習java 8 GroupingBy國家我想篩選高於平均年齡(收集)的記錄(人)返回滿足此條件的人員列表。java 8 groupingBy,字段大於平均值的篩選記錄
所以SQL相當於是
SELECT * FROM PERSON, AVG(AGE) AS AVG_AGE
GROUPBY COUNTRY
WHERE AGE > AVG_AGE
這是我嘗試到目前爲止只花了我半路上
personStream.collect(
Collectors.groupingBy(
p -> p.getCountry(),
Collectors.averagingInt(p -> p.getAge)))
到目前爲止,只返回我與分類爲關鍵和地圖按國家平均年齡作爲價值。
Chan, Japan, 40
Chong, Japan, 20
Amy, Japan, 37
James, UK, 25
Abby, UK, 15,
Jean, France 15
Pierre, France, 50
Average Japanese age = 32.33
Average UK age = 20
Average French age = 32.5
ResultSet
Chan, Japan, 40
Chong, Japan, 20
Amy, Japan, 37
James, UK, 25
Pierre, France, 50
任何提示,將不勝感激
我認爲你必須在列表中迭代兩次 - 一次計算每個國家的平均年齡(如你已經做的那樣),第二次應用使用第一次生成的地圖的過濾器確定一個人的年齡高於平均年齡的步驟。 – Eran
在SQL中,您應該使用HAVING子句按結果過濾組。 –
正如@Tagir Valeev所提到的那樣,當你引用你的條件中的聚合值時,你很可能想要'HAVING'而不是'WHERE',然而,wtf是'WHERE NAME> AVG_AGE'應該做的?比較一個姓氏與年齡⁈ – Holger