java8 stream的分組功能實(shí)例介紹
前言
最近,項(xiàng)目開發(fā)時(shí)遇到一個(gè)問題。根據(jù)業(yè)務(wù)要求,前端給后端上送的參數(shù)是一個(gè)列表(如List list),因此,后端也用了一個(gè)列表來接收。然而,等后端拿到數(shù)據(jù)后,我發(fā)現(xiàn)我需要對相同classId的數(shù)據(jù)進(jìn)行統(tǒng)一處理。于是,我找到前端妹妹討論,看她能不能幫忙把相同classId的數(shù)據(jù)封裝成列表傳給我。我好將接收參數(shù)修改成以下格式(List list):
class Dto{
String classId;
List<Student> list;
}
這時(shí),前端妹妹評估了下改動程度,眼淚汪汪地看著我
我瞬間明白了,我表現(xiàn)的機(jī)會到了!
我說道:這樣吧!前端不動,后端來處理!
后端不能說不行!
仔細(xì)看了下數(shù)據(jù),運(yùn)用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被分成了三個(gè)組,每個(gè)組的key都是classId,而每個(gè)classId都對應(yīng)一個(gè)學(xué)生列表,這樣就很輕松地實(shí)現(xiàn)了數(shù)據(jù)的分離;此時(shí),無論需要對數(shù)據(jù)進(jìn)行怎樣的處理都會很容易。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對我們的支持。
上一篇:SpringBoot項(xiàng)目執(zhí)行腳本 自動拉取最新代碼并重啟的實(shí)例內(nèi)容
欄 目:Java
下一篇:springboot集成WebSockets廣播消息(推薦)
本文標(biāo)題:java8 stream的分組功能實(shí)例介紹
本文地址:http://www.jygsgssxh.com/a1/Java/8805.html
您可能感興趣的文章
- 01-10Springboot中@Value的使用詳解
- 01-10淺談Java中真的只有值傳遞么
- 01-10如何解決線程太多導(dǎo)致java socket連接池出現(xiàn)的問題
- 01-10java實(shí)現(xiàn)的順時(shí)針/逆時(shí)針打印矩陣操作示例
- 01-10java判斷是否空最簡單的方法
- 01-10java郵件亂碼的徹底解決方案
- 01-10JAVA8獨(dú)有的map遍歷方式(非常好用)
- 01-10Java實(shí)現(xiàn)雙保險(xiǎn)線程的示例代碼
- 01-10springboot 配置DRUID數(shù)據(jù)源的方法實(shí)例分析
- 01-10springboot2.0使用Hikari連接池的方法(替換druid)


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


