当前位置: 代码迷 >> J2EE >> java集合。很着急解决方法
  详细解决方案

java集合。很着急解决方法

热度:90   发布时间:2016-04-22 01:46:15.0
java集合。很着急!!!!!!
Java code
        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);                                }        }

list读取出来的数据
  roleid rolename purid purname
1 2 普通用户角色 13 文件归档权限
2 2 普通用户角色 5 文件审批菜单权限
3 2 普通用户角色 6 归档库菜单权限
4 1 系统管理员角色 1 系统管理权限
5 3 测试用户角色 2 新增文件权限
6 2 普通用户角色 2 新增文件权限
7 2 普通用户角色 10 只能查看自己文件权限
8 2 普通用户角色 11 送审批权限
9 2 普通用户角色 3 文件审批权限
10 3 测试用户角色 4 查看所有文件权限
11 2 普通用户角色 7 文件初审权限
12 2 普通用户角色 8 修改权限
13 2 普通用户角色 9 删除权限
14 2 普通用户角色 15 文件送初审权限
现在想将list中roleid相同的数据合并为一条,并且roleid对应的purid和purname的数据组合
例如:2 普通用户角色 13,5,6.... 文件归档权限,文件审批菜单权限,归档库菜单权限......
我代码思路好像是对的,就是写不出来,希望大家帮忙解决,谢谢,很着急

------解决方案--------------------
你这么写,效率低了点吧,不如用Map来处理。

Map<String, List>

Map的Key,可以用 roleid + "|" + rolename
Map的Value,就是 List<YtOaRole_temp>
------解决方案--------------------
给点伪代码:

List<YtOaRole_temp> rolelist = rolemanagerbiz.getRolePage(pageBean); // 这是原始数据吧?

Map<String, List<YtOaRole_temp>> mapRole

for (tmp : rolelist) {
String key = tem1.getRoleId() + "|" + tem1.getRoleName()
if (!mapRole.containsKey(key)) mapRole.put(key, new ArrayList<YtOaRole_temp>);
mapRole.get(key).add(tmp);
}
------解决方案--------------------
Java code
例如: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
Java code
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不会成立,所以直接保存}
  相关解决方案