工作中遇到需要对mybatis查询出来的结果集进行分组后对数据进行操作,代码如下
public class LimitByJavaCode {
public static void main(String[] args) {
List<LimitNeedVO> list = new ArrayList<LimitNeedVO>();
//准备数据,012为分组一,345为分组二,678为分组三
for(int i = 0;i < 9; i++) {
LimitNeedVO one = new LimitNeedVO();
if(i < 3) {
one.setName("分组一");
one.setAge(i);
}else if(i >= 3 && i < 6) {
one.setName("分组二");
one.setAge(i);
}else {
one.setName("分组三");
one.setAge(i);
}
list.add(one);
}
//按照Name分组,准备Map,此处使用LinkedHashMap的原因是为了保证后续遍历的时候,按照分组时的add顺序来操作
Map<String,List<LimitNeedVO>> groupLimitNeedVO = new LinkedHashMap<String,List<LimitNeedVO>>();
for(LimitNeedVO vo : list) {
String groupName = vo.getName();
//如果Map中的key包含此时的groupName,则取出Value,直接add此实体
if(groupLimitNeedVO.containsKey(groupName)) {
groupLimitNeedVO.get(groupName).add(vo);
//否则的话,新建一个key为groupName的List,并将groupName作为key,list作为value放入map
}else {
List<LimitNeedVO> groupList = new LinkedList<LimitNeedVO>();
groupList.add(vo);
groupLimitNeedVO.put(groupName, groupList);
}
}
//如果需要再次对分组后的数据进行操作,可以取出对应的数据
Set<String> keySet = groupLimitNeedVO.keySet();
for(String groupName : keySet) {
System.out.println("当前分组为"+groupName);
for(LimitNeedVO vo : groupLimitNeedVO.get(groupName)) {
System.out.println(vo.getAge());
}
}
}
}
//输出结果为:
当前分组为分组一
0
1
2
当前分组为分组二
3
4
5
当前分组为分组三
6
7
8