7

我有一个ArrayList包含一些对象的对象,例如User,并且每个对象都有一个nameandpassword属性。如何从中仅删除User具有特定“名称”的对象ArrayList

4

9 回答 9

24
Iterator<User> it = list.iterator();
while (it.hasNext()) {
  User user = it.next();
  if (user.getName().equals("John Doe")) {
    it.remove();
  }
}
于 2012-05-08T16:03:43.153 回答
7

另一个想法:如果User类可以由用户名唯一定义,并且如果您使用以下内容覆盖equals

public boolean equals(Object arg0) {
    return this.name.equals(((user) arg0).name);
}

您可以在User不遍历列表的情况下删除 。你可以这样做:

 list.remove(new User("John Doe"))
于 2012-05-08T16:33:21.263 回答
7

你可以使用这样的东西:

           // If you are using java 8
           userList.removeIf(user-> user.getName().equals("yourUserName"));
           // With older version
           User userToRemove = null;
           for(User usr:userList) {
             if(usr.getName().equals("yourUserName")) {
                userToRemove = usr;
                break;
             }
           }
           userList.remove(userToRemove);
于 2016-01-07T11:43:33.627 回答
6

您可能会ConcurrentModificationException在尝试从List. 对此异常的解释是 的迭代器ArrayList是一个快速失败的迭代器。例如,当它检测到它在运行时的集合被修改时,它会抛出异常(失败)。这个问题的解决方案是使用Iterator.

List这是一个简单的示例,演示了如何在满足特定条件时遍历并删除元素:

List<User> list = new ...

for (Iterator<User> it = list.iterator(); it.hasNext(); ) {

    User user = it.next();
    if (user.getUserEmail().equals(currentUser.getUserEmail())) {
       it.remove();
    }
}
于 2014-06-05T07:35:00.380 回答
5

解决此问题的推荐方法是:

ArrayList<User> list = new ArrayList<User>();
list.add(new User("user1","password1"));
list.add(new User("user2","password2"));
list.add(new User("user3","password3"));
list.add(new User("user4","password4"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) 
{
    User user = iter.next();
    if(user.name.equals("user1"))
    {
        //Use iterator to remove this User object.
        iter.remove();
    }
}

使用 Iterator 删除对象比仅通过键入删除对象更有效,ArrayList(Object) 因为它更快,节省 20% 的时间,并且是 Java 集合的标准 Java 实践。

于 2016-05-19T11:07:30.053 回答
3

你可以:

  • 使用迭代器循环列表
  • 检查列表中的每个项目是否都是正确的用户(检查名称)
  • 如果是,请使用迭代器的 remove 方法。
于 2012-05-08T16:03:07.497 回答
1

只需搜索您从用户那里获得的对象的 ArrayList,并测试与您要删除的名称相同的名称。然后从列表中删除该对象。

于 2012-05-08T16:02:53.027 回答
0

你的代码可能是这样的:</p>

List<User> users = new ArrayList<User>();

public void removeUser(String name){
    for(User user:users){
        if(user.name.equals(name)){
            users.remove(user);
        }
    }
}
于 2012-05-08T16:06:23.687 回答
-1
ArrayList<User> userList=new ArrayList<>();
//load data

public void removeUser(String userName){
    for (User user: userList){
        if(user.getName()equals(userName)){
            userList.remove(user);
        }
    }
}
于 2016-12-29T05:36:04.443 回答