java8 stream的分組功能實例介紹
前言
最近,項目開發(fā)時遇到一個問題。根據(jù)業(yè)務(wù)要求,前端給后端上送的參數(shù)是一個列表(如List list),因此,后端也用了一個列表來接收。然而,等后端拿到數(shù)據(jù)后,我發(fā)現(xiàn)我需要對相同classId的數(shù)據(jù)進行統(tǒng)一處理。于是,我找到前端妹妹討論,看她能不能幫忙把相同classId的數(shù)據(jù)封裝成列表傳給我。我好將接收參數(shù)修改成以下格式(List list):
class Dto{ String classId; List<Student> list; }
這時,前端妹妹評估了下改動程度,眼淚汪汪地看著我
我瞬間明白了,我表現(xiàn)的機會到了!
我說道:這樣吧!前端不動,后端來處理!
后端不能說不行!
仔細看了下數(shù)據(jù),運用java 8 stream分組功能輕松解決。
public static void testStreamGroup(){ List<Student> stuList = new ArrayList<Student>(); Student stu1 = new Student("10001", "孫權(quán)", "1000101", 16, '男'); Student stu2 = new Student("10001", "曹操", "1000102", 16, '男'); Student stu3 = new Student("10002", "劉備", "1000201", 16, '男'); Student stu4 = new Student("10002", "大喬", "1000202", 16, '女'); Student stu5 = new Student("10002", "小喬", "1000203", 16, '女'); Student stu6 = new Student("10003", "諸葛亮", "1000301", 16, '男'); stuList.add(stu1); stuList.add(stu2); stuList.add(stu3); stuList.add(stu4); stuList.add(stu5); stuList.add(stu6); Map<String, List<Student>> collect = stuList.stream().collect(Collectors.groupingBy(Student::getClassId)); for(Map.Entry<String, List<Student>> stuMap:collect.entrySet()){ String classId = stuMap.getKey(); List<Student> studentList = stuMap.getValue(); System.out.println("classId:"+classId+",studentList:"+studentList.toString()); } }
classId:10002,studentList:[Student [classId=10002, name=劉備, studentId=1000201, age=16, sex=男], Student [classId=10002, name=大喬, studentId=1000202, age=16, sex=女], Student [classId=10002, name=小喬, studentId=1000203, age=16, sex=女]]
classId:10001,studentList:[Student [classId=10001, name=孫權(quán), studentId=1000101, age=16, sex=男], Student [classId=10001, name=曹操, studentId=1000102, age=16, sex=男]]
classId:10003,studentList:[Student [classId=10003, name=諸葛亮, studentId=1000301, age=16, sex=男]]
從上面的數(shù)據(jù)可以看出來,stuList被分成了三個組,每個組的key都是classId,而每個classId都對應(yīng)一個學(xué)生列表,這樣就很輕松地實現(xiàn)了數(shù)據(jù)的分離;此時,無論需要對數(shù)據(jù)進行怎樣的處理都會很容易。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Java實現(xiàn)的簡單數(shù)字處理類及用法示例
這篇文章主要介紹了Java實現(xiàn)的簡單數(shù)字處理類及用法,涉及java數(shù)字運算相關(guān)操作技巧,需要的朋友可以參考下2018-01-01IDEA工程運行時總是報xx程序包不存在實際上包已導(dǎo)入(問題分析及解決方案)
這篇文章主要介紹了IDEA工程運行時,總是報xx程序包不存在,實際上包已導(dǎo)入,本文給大家分享問題分析及解決方案,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2020-08-08Springboot使用sharedingjdbc實現(xiàn)分庫分表
這篇文章主要介紹了Springboot使用sharedingjdbc實現(xiàn)分庫分表,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07Spring AOP與AspectJ的對比及應(yīng)用詳解
這篇文章主要為大家介紹了Spring AOP與AspectJ的對比及應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02