我已经搜索了很多,并检查了作为可能答案提供的帖子,似乎没有人给我答案。
我有这个arraylist,我存储在线用户。 我可以从用户列表中读取并添加到它。 问题是,我似乎无法找到我如何删除它。
我试过了
online.remove("MyUsername");
我的课程和初始化程序是这样的:
ArrayList<userOnline> online = new ArrayList<userOnline>();
class userOnline {
String userName;
String data1;
String data2;
String data3;
}
我认为它会找到带有用户名的对象行并删除该行,或至少删除用户名,但它没有删除任何内容并且没有给我任何错误。
我能做些什么才能让它发挥作用?或者,如果不可能,我可以使用什么作为替代方案?指向文档解释的指针将是足够的帮助!
谢谢!
似乎解决方案是这样的,但这不被认为是好的做法
for (int i=0; i <online.size(); i++) {
if(online.get(i).userName.equals("username")) {
online.remove(i);
}
}
经过讨论和大量反馈似乎是java处理此搜索和删除的唯一正确方法,
Iterator<userOnline> it = online.iterator();
while (it.hasNext()) {
userOnline user = it.next();
if (currentLogin.equals(user.userName)) {
it.remove();
}
}
答案 0 :(得分:5)
我找不到傻瓜或合适的文件,所以这就是:
使用Iterator
:
for (Iterator<userOnline> iterator = online.iterator(); iterator.hasNext();) {
if (iterator.next().getName().equals("MyUsername")) {
iterator.remove();
}
}
答案 1 :(得分:2)
您可以创建一个函数,该函数接收用户列表并查找给定名称的第一个出现,并在找到具有如此名称的用户时将其删除
public Array<userOnline> removeUserByName(Array<userOnline> users, String nameToFind)
{
for(int i = 0; i < users.size(); i++)
{
if(users.get(i).userName.equals(nameToFind))
{
users.remove(i);
return users;
}
}
return users;
}
您还可以将此函数作为存储userOnline对象列表的类的一部分,然后您就不必将该数组传递给函数。
答案 2 :(得分:2)
遍历列表以查找您感兴趣的元素的索引:
int idx = -1;
for (int i = 0; i < online.size(); i++) {
if(online.get(i).userName.equals("MyUsername"))
{
idx = i;
}
}
使用此索引删除相关元素:
if(idx != -1) {
online.remove(online[idx]);
}
这只会删除第一次出现。您可以将此代码放入函数中并重复调用以查找所有实例。
答案 3 :(得分:2)
您必须搜索ArrayList中包含的userOnline对象,并查找匹配的索引或匹配的引用。一旦拥有其中任何一个,就可以使用重载的remove()方法之一从列表中删除该对象。请记住,默认情况下,equals方法会比较引用。
搜索结果如下:
private userOnline findUserOnlineWithUsername(String username) {
Iterator<userOnline> it = online.iterator();
onlineUser olu = null;
while(it.hasNext()) {
olu = it.next();
if (olu.userName.equals(username)) { return olu;}
}
return null;
}
答案 4 :(得分:2)
基本上,您无法直接比较苹果和梨(String
和userOnline
)。是的,您可以覆盖equals
,但它应该与所有属性匹配,而不仅仅是一个。
一个简单的解决方案是搜索List
,将每个对象userName
属性与您希望返回index
或对象引用的值进行比较,您可以使用它来删除它
或者,您可以使用Iterator
并在搜索时将其删除...
ArrayList<userOnline> online = new ArrayList<>();
userOnline newUser = new userOnline();
newUser.userName = "MyUsername";
online.add(newUser);
System.out.println(online.size());
Iterator<userOnline> it = online.iterator();
while (it.hasNext()) {
userOnline user = it.next();
if ("MyUsername".equals(user.userName)) {
it.remove();
}
}
System.out.println(online.size());
可能还有一个非常酷的&#34;流&#34;基于解决方案,但步骤很小;)
答案 5 :(得分:0)
您的代码要求从UserOnlines列表中删除String,您需要使用remove(Object o)方法的对象引用,或者您需要查找要删除和使用的对象的索引remove(int index)方法。如何将对象添加到列表中?如果您使用列表本身作为参考,则需要创建自己的方法来定义“MyUserName”应该是什么对象。