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)一個學生列表,這樣就很輕松地實現(xiàn)了數(shù)據(jù)的分離;此時,無論需要對數(shù)據(jù)進行怎樣的處理都會很容易。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支持。
上一篇:SpringBoot項目執(zhí)行腳本 自動拉取最新代碼并重啟的實例內(nèi)容
欄 目:Java
下一篇:springboot集成WebSockets廣播消息(推薦)
本文地址:http://mengdiqiu.com.cn/a1/Java/8805.html
您可能感興趣的文章
- 01-10Springboot中@Value的使用詳解
- 01-10淺談Java中真的只有值傳遞么
- 01-10如何解決線程太多導(dǎo)致java socket連接池出現(xiàn)的問題
- 01-10java實現(xiàn)的順時針/逆時針打印矩陣操作示例
- 01-10java判斷是否空最簡單的方法
- 01-10java郵件亂碼的徹底解決方案
- 01-10JAVA8獨有的map遍歷方式(非常好用)
- 01-10Java實現(xiàn)雙保險線程的示例代碼
- 01-10springboot 配置DRUID數(shù)據(jù)源的方法實例分析
- 01-10springboot2.0使用Hikari連接池的方法(替換druid)


閱讀排行
本欄相關(guān)
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
- 01-10Springboot中@Value的使用詳解
- 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
- 01-10利用Java實現(xiàn)復(fù)制Excel工作表功能
- 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
- 01-10java基于poi導(dǎo)出excel透視表代碼實例
- 01-10java實現(xiàn)液晶數(shù)字字體顯示當前時間
- 01-10基于Java驗證jwt token代碼實例
- 01-10Java動態(tài)顯示當前日期和時間
- 01-10淺談Java中真的只有值傳遞么
隨機閱讀
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現(xiàn)頁面的局部加載