java集合。很着急!!!!!!
List<YtOaRole_temp> rolelist = rolemanagerbiz.getRolePage(pageBean); List<YtOaRole_temp> rolelist2 = new ArrayList(Arrays.asList(new YtOaRole_temp[rolelist.size()])); Collections.copy(rolelist2, rolelist); List<YtOaRole_temp> rolelist3=new ArrayList(); if(rolelist.size()>0) { for(int i=0;i<rolelist.size();i++) { YtOaRole_temp tem=new YtOaRole_temp(); tem=rolelist.get(i); for(int j=0;j<rolelist2.size();j++) { YtOaRole_temp tem1=new YtOaRole_temp(); tem1=rolelist2.get(j); if(tem.getRoleId().equals(tem1.getRoleId())) { tem.setPurviewId(tem.getPurviewId()+","+tem1.getPurviewId()); tem.setPurviewName(tem.getPurviewName()+","+tem1.getPurviewName()); //rolelist2.remove(j); //rolelist.remove(i); }else { rolelist3.add(tem); } }rolelist3.add(tem); } }例如:2 普通用户角色 13,5,6.... 文件归档权限,文件审批菜单权限,归档库菜单权限......roleid rolename purid purname是YtOaRole_temp的4个属性吧?List<YtOaRole_temp> list;Map<roleid,YtOaRole_temp> map=new Map<roleid,YtOaRole_temp>();for(int i=0;i<list.size();i++){YtOaRole_temp back=map.put(roleid,list.get(i));if(!back=null){map.get(roleid).setpurid(list.get(i).getpurid()+","+back.getpurid());map.get(roleid).setpurname(list.get(i).getpurname()+","+back.getpurname());}System.out.println(map.get(roleid).getroleid()+" "+map.get(roleid).getrolename()+" "+map.get(roleid).getpurid()+" "+map.get(roleid).getpurname(););}
[解决办法]
先排序再合并,可以避免查找
for example
List<YtOaRole_temp> rolelist = rolemanagerbiz.getRolePage(pageBean); //获得原始数据Collections.sort(rolelist, new Comparator<YtOaRole_temp>() { //先按roleid排序 public int compare(YtOaRole_temp y1, YtOaRole_temp y2) { return Integer.valueOf(y1.getRoleId()).compareTo(Integer.valueOf(y2.getRoleId())); }});List<YtOaRole_temp> rolelist2 = new ArrayList<>(YtOaRole_temp); //合并结果保存int lastId = -1;YtOaRole_temp tmp = null;for (YtOaRole_temp role : rolelist) { int currentId = Integer.valueOf(role.getRoleId()); if (currentId != lastId) { //因为是按roleid排序好的,roleid不一样,则说明是下一个元素不用合并 lastId = currentId; if (tmp != null) { //如果tmp不为null就保存tmp到结果集 rolelist2.add(tmp); } tmp = new YtOaRole_temp(); //重新new一个对象 tmp.setRoleId(role.getRoleId());//复制对象的属性为当前遍历的元素的属性 tmp.setRoleName(role.getRoleName()); //其实最好提供一个克隆方法,如 tmp = role.clone(); tem.setPurviewId(role.getPurviewId()); tem.setPurviewName(role.getPurviewName()); } else { //否则,如果roleid一样,则合并 if (tmp == null) { //这个条件一般不会成立 tmp = new YtOaRole_temp(); tmp.setRoleId(role.getRoleId()); tmp.setRoleName(role.getRoleName()); tem.setPurviewId(role.getPurviewId()); tem.setPurviewName(role.getPurviewName()); } else { tem.setPurviewId(tmp.getPurviewId() + "," + role.getPurviewId()); tem.setPurviewName(tmp.getPurviewName() + "," + role.getPurviewName()); } }}if (tmp != null) { rolelist2.add(tmp); //最后一个被合并的,因为循环currentId != lastId不会成立,所以直接保存}
[解决办法]