【Java】关于Map解析List<Map<String, String>>的心得
来源:互联网 发布:海马玩mac版怎么安装 编辑:程序博客网 时间:2024/05/21 17:32
一、前言
在众多开发的项目中都会建立实体、model等包含了众多的属性和方法的类,但是有的时候就要求查询一个实体中的一部分,返回一个实体会有很多的空字段,非常浪费。这个时候我们可以使用Map
二、举个例子
我要统计新生报到数目和未报到数目,他们在数据库中是用0/1表示的,’是否报到(0/1 否/是)’,所以我就需要通过sql查询出所有0和1的个数各有多少个。查出来后,存储到map中。
我用了如下的sql语句查询出了:
这样,我就获取了0和1个个数,为了标识那个是0,那个是1,我就用了map存储。利用mybatis,返回机制是 resultType=”java.util.HashMap”,方法的返回值是 List
<select id="selectReportedAndUnreportedEnrollStudent" resultType="java.util.HashMap" > SELECT SUM(CASE WHEN is_registry = 0 then 1 else 0 END) as zerocount , SUM(CASE WHEN is_registry = 1 then 1 else 0 END) as onecount FROM t_enroll_student </select>
唠叨了这么多,终于到了重点,我要解析一个List
三、解析Map
List<Map<String ,String >>
的类型,这个类型可以放多个键值对,使用的时候要对这个map集合解析:用两个for循环,第一个for循环获取list集合中的map,第二个解析map中的数据,根据m.keySet()
就可以得到查询出来的字段,然后根据get(key)
获取对应的对象,这里要注意是获取的对象,然后在把对象转换成字符串,就可以显示出来了。
for (Map<String, String> m :list){ for (String k :m.keySet()){ Object ob = m.get(k); System.out.println(k + " : "+ob.toString() ); } }
显示结果:
onecount : 11zerocount : 66
四、原理剖析
在上面的代码中,小编用到了m.keySet(),这个可以说是Map的一类。
获取Map的值主要有四种方法,这四种方法又分为两类,一类是上面咱们使用的m.keySet(),另一类是通过m.entrySet()获取。
关于这两类的区别:
m.keySet() ,先获取所有的key集合,当需要查询value的时候,通过key来查询。
m.entrySet(),是直接将key和value的键值对直接取出来,只查询一次。
相比之下,entrySet的效率比较高一点。了解更多
小编写了一个测试方法:
@Test public void testMap(){ Map<String,String> map = new HashMap<String,String>(); map.put("b","1"); map.put("a","3"); map.put("c","6"); map.put("d","8"); map.put("e","9"); map.put("f","3"); //通过map.keySet()方法 //方法一:通过循环得到key的值,然后通过get(key)获取value; /*for(String key : map.keySet()){ String value = map.get(key); System.out.println(key+" "+value); }*/ //方法二:使用迭代器,获取key;然后判断迭代器是否有下一个。 /* Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext()){ String key=iter.next(); String value = map.get(key); System.out.println(key+" "+value); }*/ //通过map.entrySet()方法 //方法三:循环map里面的每一对键值对,然后获取key和value for(Map.Entry<String, String> vo : map.entrySet()){ vo.getKey(); vo.getValue(); System.out.println(vo.getKey()+" "+vo.getValue()); } /*//方法四:使用迭代器,获取key Iterator<Entry<String,String>> iter = map.entrySet().iterator(); while(iter.hasNext()){ Entry<String,String> entry = iter.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+" "+value); }*/ }
可以看出每种方法还是各有特点的,小编是越来越喜欢使用Map了。
五、小结
通过学习Map,存储键值对,使用也很方便,小编会在以后的时候在合适的时候使用Map的。以后会对Map做跟多的总结。希望大家会喜欢。
- 【Java】关于Map解析List<Map<String, String>>的心得
- 解析List<Map<String,List<String>>>
- android 解析 List<Map<String,String>>类型
- Java基础List<Map<String, String>>
- JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类
- JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类 .
- JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类
- JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类
- [置顶] JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类
- 有关List<Map<String, Object>>解析
- List<Map<String, String>> 转 Map<String, List<String>>
- List<Map<String, String>> 合并map的字段数据问题
- List<Map<String,String>> 输出
- List<Map<String, Object>>
- List<? extends Map<String, ?>>
- List<Map<String, Object>>
- List<? extends Map<String, ?>>
- List<Map<String, Object>>
- POJ 2985 The k-th LargestGroup(Treap+并查集)
- Java语言实现九大排序算法(快速、归并、堆、选择、插入、计数、基数、希尔、冒泡)
- 函数
- 数据库视频汇总
- 简单的Mybatis
- 【Java】关于Map解析List<Map<String, String>>的心得
- 1.if与switch 2.利用for嵌套--倒立三角3.循环与无限循环
- 1023. 组个最小数 (20)-----Python
- CentOS-7.2下配置邮件服务
- 547. Friend Circles
- 程序员国庆加班调查:你是放假,还是被加班了?(内附加班费算法,最少可拿1711元)
- Linux 与 Linux Windows 文件共享
- 每天学写redis命令(2)
- 趣图 | 实习生提出了一个新功能