设计的来源:当从数据库拿到的数据不是将区域和该区域对应的一些属性放在一个bean里的情形时,但是页面展示需要将区域和它对应的内容放在同一个bean中
设计的思路:--> 1.先创建一个Bean,包含我最终要展示的属性
2.创建一个放置该bean的列表 eList2
3.创建一个放置区域的列表 groupNames2
4.遍历未封装好的列表eventByGroupList,将区域加入区域列表groupNames2
5.对区域列表groupNames2去重
6.循环交叉遍历eventByGroupList和groupNames2,groupNames2在外层,eventByGroupList在内层,
针对每个区域和eventByGroupList中的每个bean进行匹配,如匹配的就取其值。一轮区域遍历完就将被
赋值的bean加入到目标list-eList2中
具体代码如下:
//事件按部门统计
eventByGroupsModel=decisionSectionService.listEventByGroup(decisionInput);
eventByGroupList=eventByGroupsModel.getList();
//事件按部门和区域统计列表
List<EventByGroupOrDomain> eList2=new ArrayList<EventByGroupOrDomain>();
//部门列表
List<String> groupNames2=new ArrayList<String>();
//得到区域列表
for (int i = 0; i < eventByGroupList.size(); i++) {
if(eventByGroupList.get(i).getGroupName()==null){
eventByGroupList.get(i).setGroupName("");
}
groupNames2.add(eventByGroupList.get(i).getGroupName());
}
//区域列表去重
Set set2=new HashSet();
List<String> newgroupNames2=new ArrayList();
for (Iterator iter2 = groupNames2.iterator(); iter2.hasNext();) {
Object ele2 = (Object) iter2.next();
if(set2.add(ele2)){
newgroupNames2.add((String) ele2);
}
}
封装目标list
注意:bean构建要放在循环里,避免model每次都被最新的那个覆盖,这样每次都重新创建一个bean
//事件类型 1,10,9,11,13
for (int i = 0; i < newgroupNames2.size(); i++) {
EventByGroupOrDomain eventByGroupOrDomain2=new EventByGroupOrDomain();//bean构建要放在循环里,避免model每次都被覆盖
for (int j = 0; j < eventByGroupList.size(); j++) {
if(newgroupNames2.get(i).equals(eventByGroupList.get(j).getGroupName())){
eventByGroupOrDomain2.setGroupName(newgroupNames2.get(i));
eventByGroupOrDomain2.setHasSubset(eventByGroupList.get(j).getHasSubset());
eventByGroupOrDomain2.setGroupId(eventByGroupList.get(j).getGroupId());
eventByGroupOrDomain2.setParentId(eventByGroupList.get(j).getParentId());
if(eventByGroupList.get(j).getEventType()==1){// 违规外联
eventByGroupOrDomain2.setViolationCount(eventByGroupList.get(j).getOpenNum());
}
if(eventByGroupList.get(j).getEventType()==10){//聊天工具
eventByGroupOrDomain2.setChatTool(eventByGroupList.get(j).getOpenNum());
}
if(eventByGroupList.get(j).getEventType()==9){//流媒体
eventByGroupOrDomain2.setStream(eventByGroupList.get(j).getOpenNum());
}
if(eventByGroupList.get(j).getEventType()==11){//资源滥用
eventByGroupOrDomain2.setResourceAbuse(eventByGroupList.get(j).getOpenNum());
}
if(eventByGroupList.get(j).getEventType()==13){//网络游戏
eventByGroupOrDomain2.setNetGame(eventByGroupList.get(j).getOpenNum());
}
}
}
eList2.add(eventByGroupOrDomain2);//将bean加到列表中去
}