List<Map>集合中取到Map集合中的key和value值生成新的list集合以及List<Map>集合中的元素生成新的Map集合

一:List<Map>集合中取到Map集合中的key和value值生成新的list集合

 这个问题是在做service层的时候,遇到的数据转换问题,因为集合没学好,所以写了这篇文章。

先上案例:适用于要查询的数据来自多表(),以及bean目录下没有该数据类型,这时可以用List<Map>。我案例中sql语句是这样写的:

select '栏舍' as type ,count(*) as num from manager_fence_house
union all
select '栏圈',count(*) from manager_hurdles
union all
select '动物',count(*) from manager_animal
union all
select '冷库',count(*) from manager_freezer
union all
select '员工',count(*) from base_account

可以看出使用了union all,该语句用于合并多个select结果集并列出所有的结果。

方案一:使用集合的方法:先将sql语句对应的结果打印出来:

List<Map<String,Object>> list = mapper.countNum();
[{num=3, type=栏舍}, {num=10, type=栏圈}, {num=18, type=动物}, {num=6, type=冷库}, {num=1, type=员工}]

分析:我们期望的结果集是长这样的:"data": { "name": [ "栏舍", "栏圈", "动物", "冷库", "员工" ], "value": [ 3, 11, 38, 6, 16 ] }

此时先分析结果集希望返回Map集合中key和value分别是什么:key是“name”,"value",value是 [ "栏舍", "栏圈", "动物", "冷库", "员工" ]和[ 3, 11, 38, 6, 16 ]。通过分析可知map集合中的key可以通过map.put("name",null)和map.put("name",null)来解决。这时map集合中的null又该怎么拿呢?

可以通过设置两个List集合来拿。

方法:创建两个List集合names和nums,先遍历list集合,我这里选择迭代器(什么遍历都可)

while(iterator.hasNext()){
    Map map = iterator.next();
    System.out.println(map);//{num=3, type=栏舍}
    Object type = map.get("type");
    Object num = map.get("num");
    names.add(type);
    nums.add(num);
}

对里面的map集合进行处理先拿出(这时循环中的map集合key为num和type,value为3和栏舍),使用map.get方法取出value值再将其添加到新创建的list集合中,至此完成了List<Map>集合中取到Map集合中的key和value值生成新的list集合。

二:List<Map>集合中的元素生成新的Map集合

其实道理都相同,先做循环,对List集合中的Map集合做处理,就直接放代码了。

for (Map<String,Object> map:maps
     ) {
    String weight = (String) map.get("weight");//变成String
    Object num = map.get("num");
    resultMap.put(weight, (Long) num);
}

weight和num为map集合中的key值map.get方法能通过key值取到相应的value值。

其实也可以不用循环遍历来取值,可以使用java8新特性stream流来解决一样的问题,但我学的不够清楚,就不献丑了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值