现有一个LIST:
[
{
"type":"呼吸系统",
"illness":"肺气肿",
"quotaName": "血压"
},
{
"type":"呼吸系统",
"illness":"肺气肿",
"quotaName": "血常规"
},
{
"type":"呼吸系统",
"illness":"哮喘",
"quotaName": "血常规"
},
{
"type":"循环系统",
"illness":"高血压",
"quotaName": "心电图"
},
{
"type":"循环系统",
"illness":"高血压",
"quotaName": "心电彩超"
}
]
我想得到的list:
[
{
"type":"呼吸系统",
"illnessList":[
{
"name":"肺气肿",
"quotaList":[
{
"name":"血压"
},
{
"name":"血常规"
}
]
},
{
"name":"哮喘",
"quotaList":[
{
"name":"血常规"
}
]
}
]
},
{
"type":"循环系统",
"illnessList":[
{
"name":"高血压",
"quotaList":[
{
"name":"心电图"
},
{
"name":"心电彩超"
}
]
}
]
}
]
原有的list,所有疾病系统和疾病,以及疾病检测指标都是合在一起的
我想根据类型分类得到一个list,但始终找不到思路
循环,遍历多次以后感觉脑袋糊掉了,请求各位大大给个思路
按照题主的输入输出要求,从一个
JSONArray
转换到另一个JSONArray
...感觉输出的JSONArray无非是按照了两个属性进行了归类,其实结构应该类似于Map<String,Map<String,List<String>>
,所以我的想法就是把输入的JSONArray
要转化为Map<String, Map<String,List<String>>
的结构即可...而看到我刚才说的按照属性归类...那...很显然...噔噔噔!!!...心中自然浮现了Java8的Collectors.groupingBy
...直接无脑groupingBy
就行了嘛下面是我的小思路和代码:
既然是面向对象,所以我先创建了一个输入的Bo对象
FromDataBo
接着是按照输出格式创建的输出对象
ToDataBo
(带注释的方法先可以不看...只是转化用的,可以先看数据结构)输入输出对象有了,那就可以进行最重要按属性分类,我先把转化为
Map<String,Map<String,List<String>>
的代码贴出来...主要就是这个嘛...注释嘛,熟悉lamdba
的估计一眼就看出来...不熟悉再多了解哈吧最后是完整的测试代码和结果,最后的
result
对象就是你需要的输出JSONArray
测试结果:
就酱...
这个不是后端吐出来的吗?没必要你去做处理啊,跟后端说下就好啊。或者你就用他们吐的,实现你的效果就好。
无非你想更省事。直接一个循环处理。
用上面的数组,在循环里做处理 跟你处理成后来的 是一样的。不如前置处理。性能高。下面的是标准的风格。
界面贴出来。
代码地址
http://jsbin.com/roqejoficu/e...
写的不好,如有更优的方法,希望交流交流