遍历List列表进行选择性的删除操作
来源:互联网 发布:反电信网络诈骗中心 编辑:程序博客网 时间:2024/06/06 11:58
遍历List列表进行选择性的删除操作可以用于一个显示的List中,需要删除一部份对象的同时,也可以向List中添加一部分对象的情况。
如下代码是我实际项目的用过的:
说明:当指定一个userId的时候,可以在界面上显示已经分配给该用户的角色,此时,使用的用户可以有两个操作,一个是将已经存在的角色删除一部分,还有一个操作是从未添加的角色中,再选择一部分分配给该用户。具体请看代码。
/**
* 设置用户角色映射
* @param userId
* @param roles 进行删除添加后的角色列表
*/
public static void setUserRoleRef(int userId, List<SysRole> roles) {
// 数据库中已经存在的映射
List<SysUserRoleRef> refs = new ArrayList<SysUserRoleRef>();
SysUserRoleRefExample example = new SysUserRoleRefExample();
example.createCriteria().andUserIDEqualTo(userId);
try {
refs = DBFactory.getSysUserRoleRef().selectByExample(example);
} catch (SQLException e) {
logger.error("搜索用户角色映射错误!", e);
}
// 删除两个列表中都存在的映射
for (int i = 0; i < refs.size(); i++) {
for (int j = 0; j < roles.size(); j++) {
if (refs.get(i).getRoleID().equals(roles.get(j).getRoleID())) {
if (refs.remove(refs.get(i)))
i--;
if (roles.remove(roles.get(j)))
j--;
// 删除后,重新开始
break;
}
}
}
try {
Iterator<SysUserRoleRef> itRefs = refs.iterator();
while (itRefs.hasNext()) {
SysUserRoleRef ref = new SysUserRoleRef();
ref = itRefs.next();
DBFactory.getSysUserRoleRef().deleteByPrimaryKey(
ref.getUserRoleRefID());
}
Iterator<SysRole> itNewRoles = roles.iterator();
while (itNewRoles.hasNext()) {
SysRole role = itNewRoles.next();
SysUserRoleRef ref = new SysUserRoleRef();
ref.setUserRoleRefID(Sequence
.getNext(KeyConstants.KEY_SYS_USER_ROLE_REF));
ref.setUserID(userId);
ref.setRoleID(role.getRoleID());
DBFactory.getSysUserRoleRef().insert(ref);
}
} catch (SQLException e) {
logger.error("更改用户角色映射错误!", e);
}
}
这段代码特别需要注意的地方是那个对两个列表进行删除操作的for循环,特别是删除后所做的动作。删除后做了标记的--自减动作,是为了下一次进行循环体前做++自加做提前--的准备,从而使得下次标记的位置还是上一次的位置。
举例:
当前是标记 i = 1的时候,进行了删除,那么--后就是0了,当执行i++的时候,重新获得标记1的位置。这样就充分利用了List删除后,后面的对象自动向前移动的特性来操作未遍历的对象了。
*如有其它情况,请大家补充。谢谢。
- 遍历List列表进行选择性的删除操作
- List 遍历 中进行 删除操作 的做法
- 列表删除操作-list.remove()
- python 的列表遍历删除
- python 的列表遍历删除
- python 的列表遍历删除
- python 的列表遍历删除
- C#对List同时遍历删除操作
- 遍历的时候删除List
- list的遍历与删除
- 遍历的时候删除List
- list容器的遍历删除
- python入门之列表list删除操作
- python的【列表list】:定义、索引、添加、删除、遍历、长度;组合、重复、反转、切片、比较;排序
- 【笔记】对遍历List,对List里的对象做删除操作
- 遍历操作列表的算法
- 遍历删除 list 中符合条件的元素时(for, Remove),应从后往前进行
- 在遍历List时,对List里的对象进行remove(),此操作会改变List的大小()
- 查看当前shell类型命令
- Embedded Visual C++
- 数组下标越界错误的调试
- 这个月的最后一天~~
- 移动互联网漫谈(3)
- 遍历List列表进行选择性的删除操作
- Linux shell脚本区别内容相同的文件
- Mac OSX Commands:od
- 简单表达式
- ntdll!strcmp
- 防火墙介绍
- 限定符
- CMD下设置网关
- 多域控制器环境下Active Directory灾难恢复