问题: list的多个对象 存在key一致 但value不一致 想把list的多个对象的唯一的key和重复的value归类在一起 转变成 hashMap key是唯一 value:重复的数据变成单独的list:
例如:原始数据: 转变成这样:
先说下逻辑:1: 创建一个对象 声明一个string的name 和一个list的ids
2: 然后在创建一个
hashMap=HashMap<String, List<String>>这样的hashMap 和一个用来存放NetWorkIdBean对象的list netWorkBean=arrayListOf<NetWorkIdBean>()
3: 开始判断逻辑:
完整代码:
var network = NetWorkManager() network!!.getAsync( url, projectId, header, object : ResultCallback<Response>() { override fun onError(request: Request, exception: Exception) { } override fun onResponse(response: String) { var jsobj = Gson().fromJson(response, JsonsRootBean::class.java) val status = jsobj.code val data = jsobj.data val Adomb = data?.Admob val MAX = data?.Max if (status != 200) { return } if (Adomb != null) { KVUtils.get()?.putLong("ad_use_max", 0L) // 筛选后数据 list对象 var netWorkBean = arrayListOf<NetWorkIdBean>() //new string 的name 和list的ids val hashMap = HashMap<String, List<String>>(); //遍历服务端下发的list对象 for ((index, stu) in Adomb.withIndex()) { println(" $index ${stu.ad_attr} ${stu.unit_id}") //判断hashmap是否包含key if (hashMap.containsKey(stu.ad_attr)) { // 如果包含 id合并 println("已包含 ${stu.ad_attr}") val arrayList = hashMap.get(stu.ad_attr) as ArrayList<String> //存到hashMap相对于的key的value下 arrayList.add(stu.unit_id!!) } else { //如果不包含 那么就把id进行归类到一个list里 println("添加 ${stu.ad_attr} ${stu.unit_id} ") //归类ids var idd = arrayListOf<String>() idd.add(stu.unit_id!!) //把合并的ids存放到hashMap里 hashMap.put(stu.ad_attr!!, idd) var nstu = NetWorkIdBean() nstu.name = stu.ad_attr nstu.ids = idd //把对应的name和ids存放到整个大的NetWorkIdBean对象中 netWorkBean.add(nstu) } }}
最后打印:
总结:简单来说就是直接往hashMap存放name和id 然后再判断hashMap是否有这个name 有的话直接获取通过name 就是key获取当前list 然后对应的放进去id就可以了
欢迎大家指点 询问