通常在数据库查询返回多行结果时,会以list
jdbc形式 代码如下:
Map<String, Map<String, Object>> map=new HashMap<String, Map<String, Object>>(2048);
Connection con = PoolManager.getConnection();;
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
Map<String, Object> objectMap=new HashMap<String, Object>(16);
for (int i = 1; i <= columnCount; i++) {
objectMap.put(md.getColumnName(i), rs.getObject(i));
}
map.put(String.valueOf(rs.getObject(1)),objectMap);//key objectMap(字段名,字段值)
}
PoolManager.freeConnection(con);
连接池可参考http://blog.csdn.net/yaerfeng/article/details/7076452
mybaits
mybatis中也可以做类似处理,有两种方式,1)在mapper文件中增加注解MapKey(“列名”),则列名即为key值 2)则重写ResultHandler接口
https://segmentfault.com/a/1190000004278833 MapKey
http://blog.csdn.net/sou_liu/article/details/47755635 重写ResultHandler接口
下文为使用Mybatis拦截器实现Mybatis查询返回Map的一种方法,可指定key,value归属列
http://blog.csdn.net/zylzb/article/details/40511055
lambda
当然,使用lambda表达式要更简单一些……
List<Person> personList;
Map<Long, Person> mapPerson = personList.stream().collect(Collectors.toMap(Person::getId, p -> p));
Map<Long, List<Person>> personMap = personList.stream().collect(Collectors.groupingBy(p -> p.getId()));