关于List的remove()方法遇到的坑

如果在循环的过程中调用集合的remove()方法,就会导致循环出错,因为循环过程中list.size()的大小变化了,就导致了错误。 所以,如果想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态
    
List<PortalWModule> list= new ArrayList<PortalWModule>();
list= proMenuService.getFristMenu(loginUser.getEmpId(),arr[i]);
if("2".equals(arr[i])){  //如果是运维子系统,将对其参数设置中(是否展示的)菜单进行过滤
    Iterator<PortalWModule> it=list.iterator();
    while(it.hasNext()){
        PortalWModule portalWModule=it.next();
        Map<String, Object> menuSettings = proMenuService.getMenuSettings(); //查找菜单参数设置中需要隐藏的菜单
        if(menuSettings!=null){
            if("N".equals(menuSettings.get("MENU_STATUS"))){
                String[] moduleIds = menuSettings.get("MODULE_ID").toString().split(",");
                for (String moduleId : moduleIds) {
                    if(moduleId.equals(String.valueOf(portalWModule.getModuleId()))){
                        it.remove();
                    }
                }
            }
        }
    }
}

 

posted on 2021-07-26 16:24  ALWAYS☆REMIND  阅读(251)  评论(0编辑  收藏  举报

导航