您的位置:首页 > 数据库

遍历List列表进行选择性的删除操作

2008-10-31 10:44 393 查看
遍历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 数据库 user
相关文章推荐