java - 在 java 中处理 ArrayList 中的相等性

标签 java arraylist

假设我有这段代码:

for(int i = 0; i < accounts.size(); i++) {
    if(UserID.equals(accounts.get(i).getUserID())) {
        if(accounts.contains(accounts.get(i))) {
            if(UserPass.equals(accounts.get(i).getPassword())) {
                System.out.println("True");
            }
        } else {
            typePhrase("unrecognised userID: '" + UserID + "'");
        }
    } else {
        typePhrase("unrecognised userID: '" + UserID + "'");
    }
}

它遍历一个充满对象的数组列表,这些对象有一个 ID 和一个密码。我从用户那里得到两个输入,一个是用户 ID,另一个是密码。我想要的是让它遍历保存在该 arrayList 中的每个可能的对象,如果找到匹配项,将 true 打印到控制台,我遇到的问题是,如果你输入错误的内容,它会打印一条消息,指出 arrayList 中的每个对象都无法识别。如果您在右侧键入一个,它还会为 arrayList -1 中存在的每个对象打印消息。你建议我做什么?

用户类:

public class User {
    String userID;
    String password;

    public User(String ID, String Pass) {
        userID = ID;
        password = Pass;
    }

    public String getUserID() {
        return userID;
    }

    public String getPassword() {
        return password;
    }
}

编辑:

ArrayList<User> accounts = new ArrayList<User>();

最佳答案

你应该在 User 类中实现 equals 方法:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    User user = (User) o;

    if (!getUserID().equals(user.getUserID())) return false;
    return getPassword().equals(user.getPassword());

}

然后您可以使用键入的信息创建一个新用户,并检查列表是否包含此用户:

User user = new User("typedUserId", "typedPassword");
System.out.println(accounts.contains(user));

关于java - 在 java 中处理 ArrayList 中的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38626503/

相关文章:

Java生产者消费者线程

java - ArrayList在程序中变得巨大以猜测1000-9999之间的数字

java - ArrayList 子列表的索引越界

java - 更改局部变量中的字典对象

java - 关于 CronTrigger - Quartz 的问题

java - sos 和 return 语句

java - 嵌入 javassist 依赖项破坏了 OSGi bundle

java - hibernate : Don't want to save milliseconds

java - Collections.sort 未按预期对 ArrayList 进行排序 [beanshell、Java、JMeter]

java - 从文件中对 ArrayList 进行排序