亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

java - 一個(gè)JSONArray的根據(jù)里面的類型轉(zhuǎn)化為一個(gè)新的JSONArray

瀏覽:99日期:2023-10-23 10:38:59

問題描述

現(xiàn)有一個(gè)LIST:

[{ 'type':'呼吸系統(tǒng)', 'illness':'肺氣腫', 'quotaName': '血壓'},{ 'type':'呼吸系統(tǒng)', 'illness':'肺氣腫', 'quotaName': '血常規(guī)'}, { 'type':'呼吸系統(tǒng)', 'illness':'哮喘', 'quotaName': '血常規(guī)'}, { 'type':'循環(huán)系統(tǒng)', 'illness':'高血壓', 'quotaName': '心電圖'}, { 'type':'循環(huán)系統(tǒng)', 'illness':'高血壓', 'quotaName': '心電彩超'} ]

我想得到的list:

[{ 'type':'呼吸系統(tǒng)', 'illnessList':[{ 'name':'肺氣腫', 'quotaList':[ { 'name':'血壓' }, { 'name':'血常規(guī)' } ]},{ 'name':'哮喘', 'quotaList':[{ 'name':'血常規(guī)'} ]} ]},{ 'type':'循環(huán)系統(tǒng)', 'illnessList':[{ 'name':'高血壓', 'quotaList':[{ 'name':'心電圖'},{ 'name':'心電彩超'} ]} ]} ]

原有的list,所有疾病系統(tǒng)和疾病,以及疾病檢測指標(biāo)都是合在一起的

我想根據(jù)類型分類得到一個(gè)list,但始終找不到思路

循環(huán),遍歷多次以后感覺腦袋糊掉了,請求各位大大給個(gè)思路

問題解答

回答1:

按照題主的輸入輸出要求,從一個(gè)JSONArray轉(zhuǎn)換到另一個(gè)JSONArray...感覺輸出的JSONArray無非是按照了兩個(gè)屬性進(jìn)行了歸類,其實(shí)結(jié)構(gòu)應(yīng)該類似于Map<String,Map<String,List<String>>,所以我的想法就是把輸入的JSONArray要轉(zhuǎn)化為Map<String, Map<String,List<String>>的結(jié)構(gòu)即可...而看到我剛才說的按照屬性歸類...那...很顯然...噔噔噔?。。?..心中自然浮現(xiàn)了Java8的Collectors.groupingBy...直接無腦groupingBy就行了嘛

下面是我的小思路和代碼:既然是面向?qū)ο?,所以我先?chuàng)建了一個(gè)輸入的Bo對象FromDataBo

@Getter@Setterpublic class FromDataBo { private String type; private String illness; private String quotaName;}

接著是按照輸出格式創(chuàng)建的輸出對象ToDataBo (帶注釋的方法先可以不看...只是轉(zhuǎn)化用的,可以先看數(shù)據(jù)結(jié)構(gòu))

@Getter@Setterpublic class ToDataBo { private String type; private List<ToDataIllnessBo> illnessList; /** * map轉(zhuǎn)化為List<ToDataBo> * @param map * @return */ public static List<ToDataBo> createByMap(Map<String, Map<String, List<String>>> map){return map.entrySet().stream().map(ToDataBo::of).collect(Collectors.toList()); } /** * 一個(gè)Map.Entry<String, Map<String, List<String>>>對應(yīng)轉(zhuǎn)化為一個(gè)ToDataBo * @param entry * @return */ public static ToDataBo of(Map.Entry<String, Map<String, List<String>>> entry){ToDataBo dataBo = new ToDataBo();dataBo.setType(entry.getKey());dataBo.setIllnessList(entry.getValue().entrySet().stream().map(ToDataIllnessBo::of).collect(Collectors.toList()));return dataBo; }@Getter @Setter static class ToDataIllnessBo{private String name;private List<ToDataQuotaBo> quotaList;/** * 一個(gè)Map.Entry<String, List<String>>對應(yīng)轉(zhuǎn)化為一個(gè)ToDataIllnessBo * @param entry * @return */public static ToDataIllnessBo of(Map.Entry<String, List<String>> entry){ ToDataIllnessBo dataIllnessBo = new ToDataIllnessBo(); dataIllnessBo.setName(entry.getKey()); dataIllnessBo.setQuotaList(entry.getValue().stream().map(ToDataQuotaBo::new).collect(Collectors.toList())); return dataIllnessBo;} } @Getter @Setter @AllArgsConstructor static class ToDataQuotaBo {private String name; }}

輸入輸出對象有了,那就可以進(jìn)行最重要按屬性分類,我先把轉(zhuǎn)化為Map<String,Map<String,List<String>>的代碼貼出來...主要就是這個(gè)嘛...注釋嘛,熟悉lamdba的估計(jì)一眼就看出來...不熟悉再多了解哈吧

Map<String, Map<String, List<String>>> collect = fromDataBos.stream().collect(// 按照type分類Collectors.groupingBy(FromDataBo::getType,// 按照type分類后,同一類的數(shù)據(jù)再按照illness分類Collectors.groupingBy(FromDataBo::getIllness,// 按照type分類,再按照illness分類后,同一類的數(shù)據(jù)取其中的QuotaName并轉(zhuǎn)化為集合Collectors.mapping(FromDataBo::getQuotaName, Collectors.toList()))));

最后是完整的測試代碼和結(jié)果,最后的result對象就是你需要的輸出JSONArray

public class Test1 { public static void main(String[] args) {String from = '[n' +'{n' +' 'type':'呼吸系統(tǒng)',n' +' 'illness':'肺氣腫',n' +' 'quotaName': '血壓'n' +'},n' +'{n' +' 'type':'呼吸系統(tǒng)',n' +' 'illness':'肺氣腫',n' +' 'quotaName': '血常規(guī)'n' +'},n' +' {n' +' 'type':'呼吸系統(tǒng)',n' +' 'illness':'哮喘',n' +' 'quotaName': '血常規(guī)'n' +'},n' +' {n' +' 'type':'循環(huán)系統(tǒng)',n' +' 'illness':'高血壓',n' +' 'quotaName': '心電圖'n' +'},n' +' {n' +' 'type':'循環(huán)系統(tǒng)',n' +' 'illness':'高血壓',n' +' 'quotaName': '心電彩超'n' +'}n' +' ]';// 把輸入的JSONArray字符串轉(zhuǎn)化為FromDataBo集合List<FromDataBo> fromDataBos = JSONArray.parseArray(from, FromDataBo.class);// 歸類Map<String, Map<String, List<String>>> collect = fromDataBos.stream().collect(// 按照type分類Collectors.groupingBy(FromDataBo::getType,// 按照type分類后,同一類的數(shù)據(jù)再按照illness分類Collectors.groupingBy(FromDataBo::getIllness,// 按照type分類,再按照illness分類后,同一類的數(shù)據(jù)取其中的QuotaName并轉(zhuǎn)化為集合Collectors.mapping(FromDataBo::getQuotaName, Collectors.toList()))));// 歸類后的map轉(zhuǎn)化為輸出對象ToDataBo集合List<ToDataBo> toDataBos = ToDataBo.createByMap(collect);// 我是輸出對象,我在這JSONArray result = JSONArray.parseArray(JSONArray.toJSONString(toDataBos));System.out.println(result); }}

測試結(jié)果:

java - 一個(gè)JSONArray的根據(jù)里面的類型轉(zhuǎn)化為一個(gè)新的JSONArray

就醬...

回答2:

這個(gè)不是后端吐出來的嗎?沒必要你去做處理啊,跟后端說下就好啊?;蛘吣憔陀盟麄兺碌模瑢?shí)現(xiàn)你的效果就好。無非你想更省事。直接一個(gè)循環(huán)處理。用上面的數(shù)組,在循環(huán)里做處理 跟你處理成后來的 是一樣的。不如前置處理。性能高。下面的是標(biāo)準(zhǔn)的風(fēng)格。界面貼出來。

回答3:

代碼地址http://jsbin.com/roqejoficu/e...

var convertData = function(data){ let result = []; var level1Obj = {}; var level2Obj = {}; var level3Obj = {}; data.forEach(function (item, index, arr) {//一層對象level1Obj[item.type] = {};level1Obj[item.type]['type'] = item.type;//2層對象level2Obj[item.type+item.illness] = {};level2Obj[item.type+item.illness]['p1'] = item.type;level2Obj[item.type+item.illness]['type'] = item.illness;//3層對象level3Obj[index] = {};level3Obj[index]['p1'] = item.type;level3Obj[index]['p2'] = item.illness;level3Obj[index]['type'] = item.quotaName; });for (var level1 in level1Obj) {var o1 = {};o1.type = level1Obj[level1].type;o1.list = [];result.push(o1);for (var level2 in level2Obj) { if (level2Obj[level2].p1 == level1Obj[level1].type) {var o2 = {};o2.type = level2Obj[level2].type;o2.list = [];o1.list.push(o2);for (var level3 in level3Obj) { if (level3Obj[level3].p1 == level1Obj[level1].type && level3Obj[level3].p2 == level2Obj[level2].type) {var o3 = {};o3.type = level3Obj[level3].type;o2.list.push(o3); }} }} } console.log(result); return result;},var result = convertData(data);

寫的不好,如有更優(yōu)的方法,希望交流交流

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 国产成人综合久久精品尤物 | 国内一级纶理片免费 | 国产区二区 | 国产精品毛片无码 | 精品久久综合一区二区 | 国产在线视精品麻豆 | 真人一级毛片国产 | 麻豆高清视频在线观看 | 久久综合九色婷婷97 | 一级做a爰片性色毛片刺激 一级做a爰片性色毛片视频图片 | 国产高清国产专区国产精品 | 丁香婷婷激情五月 | 国产精品亚洲成在人线 | 国产亚洲综合一区二区在线 | 不卡一区在线观看 | 美国毛片基地a级e片 | 国产亚洲精品自在久久不卡 | 91久久国产综合精品 | 超色软件 | 你懂的亚洲 | 99re7在线精品免费视频 | 日韩一级视频 | 亚洲女初尝黑人巨高清在线观看 | 99久久爱re热6在播放 | 国产一级特黄aa级特黄裸毛片 | 欧美一区永久视频免费观看 | 国产日韩一区二区三区在线播放 | 成人性色生活片全黄 | 亚洲欧美v | 屁屁影院一区二区三区 | 俄罗斯胖老太与小伙交 | 精品国产香蕉伊思人在线又爽又黄 | 精品国产免费一区二区三区 | 特大巨黑人吊与黑人性xxxx | 亚洲精品第一 | 国产欧美精品系列在线播放 | 欧美专区视频 | 免费国产黄色片 | 免费国产黄网站在线观看视频 | 欧美日韩国产一区二区三区 | 久久全国免费久久青青小草 |