我有ArrayList
包含一些对象,例如User
,每个对象都有name
和password
属性。如何从此User
中仅删除具有特定“名称”的ArrayList
对象?
答案 0 :(得分:22)
Iterator<User> it = list.iterator();
while (it.hasNext()) {
User user = it.next();
if (user.getName().equals("John Doe")) {
it.remove();
}
}
答案 1 :(得分:7)
另一个想法:如果User
类可以由用户名唯一定义,并且您使用以下内容覆盖equals
:
public boolean equals(Object arg0) {
return this.name.equals(((user) arg0).name);
}
您可以删除User
而无需遍历列表。你可以这样做:
list.remove(new User("John Doe"))
答案 2 :(得分: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);
答案 3 :(得分: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();
}
}
答案 4 :(得分:4)
解决此问题的推荐方法是:
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实践。
答案 5 :(得分:3)
你可以:
答案 6 :(得分:1)
只需搜索从用户处获取的对象的ArrayList,并测试与要删除的名称相等的名称。然后从列表中删除该对象。
答案 7 :(得分:0)
您的代码可能如下所示:
List<User> users = new ArrayList<User>();
public void removeUser(String name){
for(User user:users){
if(user.name.equals(name)){
users.remove(user);
}
}
}
答案 8 :(得分:-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);
}
}
}