通過stream的方式將list元素里的屬性抽取出來單獨的list

當需要將一個包含對象的list集合中的對象中的某一個屬性通過某種條件抽取成為一個新的list的時候可以這么做:
例如對象:

[{name:張三,hight:187cm,tizhong:69KG,dt:20190817,tp:10min,stepIndex:0},
{name:張三,hight:187cm,tizhong:69KG,dt:20190817,tp:10min,stepIndex:1}
...
]

我們有一個包含這個對象的list集合,記錄了張三每天每個時間片的身高體重的變化(可怕的統(tǒng)計),那么假設我們現(xiàn)在有個需求是將張三在每個時間片的身高體重變化分別提取出來,并且要取出每天相同時間片的平均值,那么我們怎么辦?
首先我們的list里有很多天的數(shù)據(jù),所以我們可以整理下思路:

  1. 把所有相同的時間片進行累加
  2. 求平均數(shù),
  3. 最終獲取一天的每個時間片的集合
    詳細步驟:
    因為最終不管是身高還是體重我們都需要獲得一個包含一天時間片的新的集合,所以我們第一步可以先把集合抽取出來,因為要依靠時間片為條件進行累加,所以我們可以先以時間片step_index為鍵,創(chuàng)建一個hashmap,然后循環(huán)list,將相同時間片的值累加到map的value中:
List<User> userList = new arrayList<>();
userList.add(xxxxxxx);
//假設有很多條記錄了
Map<Integer,User> userMap = new HashMap<>();
userList.stream().forEach( user -> {
        if(userMap. containsKey(user.getStepIndex())){
            User user = new User(“”,0,0,””,””,0)
            userMap.set(user.getStepIndex(), user)
}
userMap.get(user.getStepIndex()).setStepIndex(userMap.get(user.getStepIndex()).getStepIndex()+1)
User user01 = getSum(user,userMap.get(user.getStepIndex()));
userMap.put(user.getStepIndex(), user01)
})

Public User getSum(User u1, User u2){
        u2.setHight(u1.getHight() + u2.getHight());
        u2.setTizhong(u1.getTizhong() + u2.getTizhong);
        return u2;
}

/到這里我們將時間片序號作為map的key,只要沒有這個時間片序號的鍵,我們就new一個默認初始化的user放進map。然后我們將value里的user的stepIndex屬性作為累加次數(shù)來計數(shù)(因為我們不需要關注對象里的stepIndex了,并且stepIndex是數(shù)字類型符合我們的技術要求)接著就可以將當前l(fā)ist里的數(shù)累加到我們new出來的user里了。

List<Line> hightList = userMap.entrySet().stream().map(user -> {
                    return new Line(user.getStepIndex(), user.getHight());
                }).collect(Collectors.toList());
List<Line> TizhongList = userMap.entrySet().stream().map(user -> {
                    return new Line (user.getStepIndex(), user.getTizhong());
                }).collect(Collectors.toList());

public class Line{
  private Integer x;
  private String y;
}

到這里我們用entrySet()方法將map轉(zhuǎn)換成list然后用stream流式調(diào)用 將需要的list數(shù)據(jù)轉(zhuǎn)換出來了。
如果有更優(yōu)雅的實現(xiàn)方法希望大家可以留言,共同學習~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容