日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Json数组列表中的数据分组排序、组内排序

發(fā)布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Json数组列表中的数据分组排序、组内排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

        • 問題描述
        • 方式一:先全部排序,在分組排序
        • 方式二:使用HashMap取出來分組再組內(nèi)排序
        • 方式三:使用TreeMap取出來分組再組內(nèi)排序
        • 測試代碼及耗時

問題描述

現(xiàn)在有一個用戶信息數(shù)組,用戶信息都在這個數(shù)組里,數(shù)組中有組號也有排序,現(xiàn)在需要將這些元素按照組號(groupNo)分組并排序,同時組內(nèi)元素也按照排序字段(sortNum)排序?
示例json數(shù)組,分組排序之前

[{"userId": "7","userName": "neo1","groupNo": "3","sortNum": "2" }, {"userId": "11","userName": "leo08","groupNo": "3","sortNum": "1" }, {"userId": "15","userName": "zhangsan","groupNo": "3","sortNum": "8" }, {"userId": "1","userName": "neo","groupNo": "1","sortNum": "2" }, {"userId": "2","userName": "leo","groupNo": "1","sortNum": "8" }, {"userId": "3","userName": "zhangsan","groupNo": "1","sortNum": "3" }, {"userId": "4","userName": "neo1","groupNo": "2","sortNum": "6" }, {"userId": "2","userName": "leo08","groupNo": "2","sortNum": "2" }, {"userId": "3","userName": "zhangsan1","groupNo": "2","sortNum": "8" }]

分組排序之后:

[{"list":[{"sortNum":"2","userName":"neo","userId":"1","groupNo":"1"},{"sortNum":"3","userName":"zhangsan","userId":"3","groupNo":"1"},{"sortNum":"8","userName":"leo","userId":"2","groupNo":"1"}],"groupNo":"1"},{"list":[{"sortNum":"2","userName":"leo08","userId":"2","groupNo":"2"},{"sortNum":"6","userName":"neo1","userId":"4","groupNo":"2"},{"sortNum":"8","userName":"zhangsan1","userId":"3","groupNo":"2"}],"groupNo":"2"},{"list":[{"sortNum":"1","userName":"leo08","userId":"11","groupNo":"3"},{"sortNum":"2","userName":"neo1","userId":"7","groupNo":"3"},{"sortNum":"8","userName":"zhangsan","userId":"15","groupNo":"3"}],"groupNo":"3"} ]

方式一:先全部排序,在分組排序

/*** 方式一:先全部排序,在分組排序** @return*/public static List<Map<String, Object>> sortByGroupNo1() {String jsonList = "[{\"userId\":\"7\",\"userName\":\"neo1\",\"groupNo\":\"3\",\"sortNum\":\"2\"},{\"userId\":\"11\",\"userName\":\"leo08\",\"groupNo\":\"3\",\"sortNum\":\"1\"},{\"userId\":\"15\",\"userName\":\"zhangsan\",\"groupNo\":\"3\",\"sortNum\":\"8\"},{\"userId\":\"1\",\"userName\":\"neo\",\"groupNo\":\"1\",\"sortNum\":\"2\"},{\"userId\":\"2\",\"userName\":\"leo\",\"groupNo\":\"1\",\"sortNum\":\"8\"},{\"userId\":\"3\",\"userName\":\"zhangsan\",\"groupNo\":\"1\",\"sortNum\":\"3\"},{\"userId\":\"4\",\"userName\":\"neo1\",\"groupNo\":\"2\",\"sortNum\":\"6\"},{\"userId\":\"2\",\"userName\":\"leo08\",\"groupNo\":\"2\",\"sortNum\":\"2\"},{\"userId\":\"3\",\"userName\":\"zhangsan1\",\"groupNo\":\"2\",\"sortNum\":\"8\"}]";List<Map<String, Object>> list = (List<Map<String, Object>>) JSON.parse(jsonList);List<String> groupNoList = new ArrayList<>();//使用比較器,先對分組進(jìn)行排序list.sort(new Comparator<Map<String, Object>>() {@Overridepublic int compare(Map<String, Object> o1, Map<String, Object> o2) {if (!groupNoList.contains(o1.get("groupNo").toString())) {groupNoList.add(o1.get("groupNo").toString());}if (!groupNoList.contains(o2.get("groupNo").toString())) {groupNoList.add(o1.get("groupNo").toString());}if (Integer.valueOf(o1.get("groupNo").toString()) > Integer.valueOf(o2.get("groupNo").toString())) {return 1;} else if (Integer.valueOf(o1.get("groupNo").toString()) < Integer.valueOf(o2.get("groupNo").toString())) {return -1;} else {return 0;}}});//定義一個要返回的新的ListList<Map<String, Object>> returnList = new ArrayList<>();//先對分組列表排序Collections.sort(groupNoList);//對分組進(jìn)行排序for (String groupNo : groupNoList) {Map<String, Object> newMap = new HashMap<>();newMap.put("groupNo", groupNo);newMap.put("list", new ArrayList<Map<String, Object>>());for (Map<String, Object> tmp : list) {if (groupNo.equals(tmp.get("groupNo").toString())) {List list1 = (List<Map<String, Object>>) newMap.get("list");list1.add(tmp);}}List<Map<String, Object>> list2 = (List<Map<String, Object>>) newMap.get("list");list2.sort(new Comparator<Map<String, Object>>() {@Overridepublic int compare(Map<String, Object> o1, Map<String, Object> o2) {if (Integer.valueOf(o1.get("sortNum").toString()) > Integer.valueOf(o2.get("sortNum").toString())) {return 1;} else if (Integer.valueOf(o1.get("sortNum").toString()) < Integer.valueOf(o2.get("sortNum").toString())) {return -1;} else {return 0;}}});returnList.add(newMap);}return returnList;}

本來就寫了上面一個方法,但是作為程序員,需要盡可能的提高性能,我接下來又提供了兩種實現(xiàn)方式:

方式二:使用HashMap取出來分組再組內(nèi)排序

/*** 方式二:直接使用HashMap取出來所有分組,在進(jìn)行分組排序,組內(nèi)排序*/public static List<Map<String, Object>> sortByGroupNo2() {String jsonList = "[{\"userId\":\"7\",\"userName\":\"neo1\",\"groupNo\":\"3\",\"sortNum\":\"2\"},{\"userId\":\"11\",\"userName\":\"leo08\",\"groupNo\":\"3\",\"sortNum\":\"1\"},{\"userId\":\"15\",\"userName\":\"zhangsan\",\"groupNo\":\"3\",\"sortNum\":\"8\"},{\"userId\":\"1\",\"userName\":\"neo\",\"groupNo\":\"1\",\"sortNum\":\"2\"},{\"userId\":\"2\",\"userName\":\"leo\",\"groupNo\":\"1\",\"sortNum\":\"8\"},{\"userId\":\"3\",\"userName\":\"zhangsan\",\"groupNo\":\"1\",\"sortNum\":\"3\"},{\"userId\":\"4\",\"userName\":\"neo1\",\"groupNo\":\"2\",\"sortNum\":\"6\"},{\"userId\":\"2\",\"userName\":\"leo08\",\"groupNo\":\"2\",\"sortNum\":\"2\"},{\"userId\":\"3\",\"userName\":\"zhangsan1\",\"groupNo\":\"2\",\"sortNum\":\"8\"}]";List<Map<String, Object>> list = (List<Map<String, Object>>) JSON.parse(jsonList);//定義一個要返回的新的ListList<Map<String, Object>> returnList = new ArrayList<>();Iterator iterator = list.iterator();Map<String, ArrayList<Map<String, Object>>> hashMap = new HashMap<>();while (iterator.hasNext()) {Map<String, Object> tmp = (Map<String, Object>) iterator.next();String groupNo = tmp.get("groupNo").toString();if (hashMap.containsKey(groupNo)) {ArrayList<Map<String, Object>> list2 = hashMap.get(groupNo);list2.add(tmp);} else {hashMap.put(groupNo, new ArrayList<>());ArrayList<Map<String, Object>> list1 = hashMap.get(groupNo);list1.add(tmp);}}//取出來key進(jìn)行排序List<String> keySet = new ArrayList<>(hashMap.keySet());Collections.sort(keySet);Iterator iterator1 = keySet.iterator();while (iterator1.hasNext()) {String groupNo = (String) iterator1.next();Map<String, Object> newMap = new HashMap<>();List<Map<String, Object>> list2 = hashMap.get(groupNo);Collections.sort(list2, (o1, o2) -> {if (Integer.valueOf(o1.get("sortNum").toString()) > Integer.valueOf(o2.get("sortNum").toString())) {return 1;} else if (Integer.valueOf(o1.get("sortNum").toString()) < Integer.valueOf(o2.get("sortNum").toString())) {return -1;} else {return 0;}});newMap.put("groupNo", groupNo);newMap.put("list", list2);returnList.add(newMap);}return returnList;}

方式三:使用TreeMap取出來分組再組內(nèi)排序

/*** 方式三:使用TreeMap先分組排序,在組內(nèi)排序*/public static List<Map<String, Object>> sortByGroupNo3() {String jsonList = "[{\"userId\":\"7\",\"userName\":\"neo1\",\"groupNo\":\"3\",\"sortNum\":\"2\"},{\"userId\":\"11\",\"userName\":\"leo08\",\"groupNo\":\"3\",\"sortNum\":\"1\"},{\"userId\":\"15\",\"userName\":\"zhangsan\",\"groupNo\":\"3\",\"sortNum\":\"8\"},{\"userId\":\"1\",\"userName\":\"neo\",\"groupNo\":\"1\",\"sortNum\":\"2\"},{\"userId\":\"2\",\"userName\":\"leo\",\"groupNo\":\"1\",\"sortNum\":\"8\"},{\"userId\":\"3\",\"userName\":\"zhangsan\",\"groupNo\":\"1\",\"sortNum\":\"3\"},{\"userId\":\"4\",\"userName\":\"neo1\",\"groupNo\":\"2\",\"sortNum\":\"6\"},{\"userId\":\"2\",\"userName\":\"leo08\",\"groupNo\":\"2\",\"sortNum\":\"2\"},{\"userId\":\"3\",\"userName\":\"zhangsan1\",\"groupNo\":\"2\",\"sortNum\":\"8\"}]";List<Map<String, Object>> list = (List<Map<String, Object>>) JSON.parse(jsonList);//這里使用treeMap的自動排序機(jī)制,對groupNo進(jìn)行排序TreeMap<String, ArrayList<Map<String, Object>>> treeMap = new TreeMap<>();Iterator iterator = list.iterator();while (iterator.hasNext()) {Map<String, Object> tmp = (Map<String, Object>) iterator.next();String groupNo = tmp.get("groupNo").toString();if (treeMap.containsKey(groupNo)) {ArrayList<Map<String, Object>> list2 = treeMap.get(groupNo);list2.add(tmp);Collections.sort(list2, (o1, o2) -> {if (Integer.valueOf(o1.get("sortNum").toString()) > Integer.valueOf(o2.get("sortNum").toString())) {return 1;} else if (Integer.valueOf(o1.get("sortNum").toString()) < Integer.valueOf(o2.get("sortNum").toString())) {return -1;} else {return 0;}});} else {treeMap.put(groupNo, new ArrayList<Map<String, Object>>());ArrayList<Map<String, Object>> list1 = treeMap.get(groupNo);list1.add(tmp);}}//定義一個要返回的新的ListList<Map<String, Object>> returnList = new ArrayList<>();Iterator iter = treeMap.entrySet().iterator();while (iter.hasNext()) {Map<String, Object> newMap = new HashMap<>();Map.Entry<String, ArrayList<Map<String, Object>>> entry = (Map.Entry<String, ArrayList<Map<String, Object>>>) iter.next();String keyGroupNo = entry.getKey();newMap.put("groupNo", keyGroupNo);newMap.put("list", entry.getValue());returnList.add(newMap);}return returnList;}

測試代碼及耗時

/*** 花費(fèi)時間測試*/public static void costTime() {System.out.println("sortByGroupNo1排序結(jié)果:" + JSON.toJSONString(sortByGroupNo1()));System.out.println("sortByGroupNo2排序結(jié)果:" + JSON.toJSONString(sortByGroupNo2()));System.out.println("sortByGroupNo3排序結(jié)果:" + JSON.toJSONString(sortByGroupNo3()));int loopTimes = 100000;long startTime1 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {sortByGroupNo1();}System.out.println(loopTimes + "次循環(huán),sortByGroupNo1耗時:" + (System.currentTimeMillis() - startTime1) + "ms");long startTime2 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {sortByGroupNo2();}System.out.println(loopTimes + "次循環(huán),sortByGroupNo2耗時:" + (System.currentTimeMillis() - startTime2) + "ms");long startTime3 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {sortByGroupNo3();}System.out.println(loopTimes + "次循環(huán),sortByGroupNo3耗時:" + (System.currentTimeMillis() - startTime3) + "ms");}

結(jié)果如下

sortByGroupNo1排序結(jié)果:[{"list":[{"sortNum":"2","userName":"neo","userId":"1","groupNo":"1"},{"sortNum":"3","userName":"zhangsan","userId":"3","groupNo":"1"},{"sortNum":"8","userName":"leo","userId":"2","groupNo":"1"}],"groupNo":"1"},{"list":[{"sortNum":"2","userName":"leo08","userId":"2","groupNo":"2"},{"sortNum":"6","userName":"neo1","userId":"4","groupNo":"2"},{"sortNum":"8","userName":"zhangsan1","userId":"3","groupNo":"2"}],"groupNo":"2"},{"list":[{"sortNum":"1","userName":"leo08","userId":"11","groupNo":"3"},{"sortNum":"2","userName":"neo1","userId":"7","groupNo":"3"},{"sortNum":"8","userName":"zhangsan","userId":"15","groupNo":"3"}],"groupNo":"3"}] sortByGroupNo2排序結(jié)果:[{"list":[{"sortNum":"2","userName":"neo","userId":"1","groupNo":"1"},{"sortNum":"3","userName":"zhangsan","userId":"3","groupNo":"1"},{"sortNum":"8","userName":"leo","userId":"2","groupNo":"1"}],"groupNo":"1"},{"list":[{"sortNum":"2","userName":"leo08","userId":"2","groupNo":"2"},{"sortNum":"6","userName":"neo1","userId":"4","groupNo":"2"},{"sortNum":"8","userName":"zhangsan1","userId":"3","groupNo":"2"}],"groupNo":"2"},{"list":[{"sortNum":"1","userName":"leo08","userId":"11","groupNo":"3"},{"sortNum":"2","userName":"neo1","userId":"7","groupNo":"3"},{"sortNum":"8","userName":"zhangsan","userId":"15","groupNo":"3"}],"groupNo":"3"}] sortByGroupNo3排序結(jié)果:[{"list":[{"sortNum":"2","userName":"neo","userId":"1","groupNo":"1"},{"sortNum":"3","userName":"zhangsan","userId":"3","groupNo":"1"},{"sortNum":"8","userName":"leo","userId":"2","groupNo":"1"}],"groupNo":"1"},{"list":[{"sortNum":"2","userName":"leo08","userId":"2","groupNo":"2"},{"sortNum":"6","userName":"neo1","userId":"4","groupNo":"2"},{"sortNum":"8","userName":"zhangsan1","userId":"3","groupNo":"2"}],"groupNo":"2"},{"list":[{"sortNum":"1","userName":"leo08","userId":"11","groupNo":"3"},{"sortNum":"2","userName":"neo1","userId":"7","groupNo":"3"},{"sortNum":"8","userName":"zhangsan","userId":"15","groupNo":"3"}],"groupNo":"3"}] 100000次循環(huán),sortByGroupNo1耗時:3433ms 100000次循環(huán),sortByGroupNo2耗時:1338ms 100000次循環(huán),sortByGroupNo3耗時:992ms

總結(jié)

以上是生活随笔為你收集整理的Json数组列表中的数据分组排序、组内排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线电影网站 | 两个人看的www视频免费完整版 | 在线手机av| 久久一视频 | 久久婷香 | 依人综合网 | 国产www在线 | 黄色成人在线免费观看 | 国产一区二区三区视频播放 | 日本无遮羞调教打屁股网站 | 性生活视频网站 | 欧美日韩欧美 | 丰满熟妇肥白一区二区在线 | 欧美视频日韩视频 | 亚洲第一视频在线 | 99免费| 奇米影视777在线观看 | 精品视频一二 | 观看av| 中文字幕不卡在线 | 丁香婷婷成人 | 美女又爽又黄免费 | 小嫩嫩12欧美 | 91快射 | 青青视频网站 | 自拍av在线 | 亚洲美女高潮久久久 | 亚洲理论中文字幕 | 高清无码视频直接看 | 992tv在线影院 | 欧美日韩不卡在线 | 成人夜视频 | 久久桃花网| 夜夜高潮夜夜爽国产伦精品 | 国产性生活一级片 | 久久国产亚洲 | 欧美高清视频一区 | 在线一区视频 | 中文字幕久久av | 国产超碰人人模人人爽人人添 | 久热欧美 | 久久五月网 | 精品国产99一区二区乱码综合 | 成年人小视频在线观看 | 狠狠伊人 | 老司机av影院 | 伊人久久大香线蕉av一区 | 91免费网站 | 中文字幕有码视频 | 黄色精品在线 | 韩国成年人网站 | 精品国产一区二区三区四 | 欧美日本| 特级一级黄色片 | 爱视频福利网 | 自拍欧美日韩 | 国产视频资源 | av丝袜在线观看 | 91影视在线观看 | 日本欧美一区二区三区不卡视频 | 国产人伦精品一区二区三区 | 老司机在线免费视频 | 黑鬼大战白妞高潮喷白浆 | 国产一区视频在线免费观看 | 中日韩中文字幕 | 亚洲第三区 | 女女同性高清片免费看 | 黄色一级视频免费看 | 国产91在线播放九色 | 亚洲天堂影视 | 国产97av| 国产精品3p视频 | 精品三区视频 | 网友自拍视频 | 日本黄大片在线观看 | 成人1区2区 | 欧美一区,二区 | 国产精品99久久久久久一二区 | 日本网站免费观看 | 999热精品视频 | 黑人精品无码一区二区三区 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 色偷av| 美国黄色片网站 | 中文字幕第22页 | 91麻豆一区二区三区 | 在线观看免费黄色小视频 | 日日舔夜夜摸 | 波多野结衣视频免费观看 | 精品国产一二区 | 日韩免费在线视频观看 | 九九九九久久久久 | 四虎8848| 精品久久久久久久久久久久久久久久久 | 日本成人激情 | 国产最新精品视频 | 大黄网站在线观看 | 成人精品综合 | 男阳茎进女阳道视频大全 |