在java中处理ArrayList中的相等性

Sha*_*oth 1 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 + "'");
    }
}
Run Code Online (Sandbox Code Playgroud)

它通过一个填充了对象的arrayList,它有一个ID和一个密码.我从用户那里得到两个输入,一个是userID,另一个是密码.我想要的是它通过该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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

ArrayList<User> accounts = new ArrayList<User>();
Run Code Online (Sandbox Code Playgroud)

Mar*_*ias 5

您应该在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());

}
Run Code Online (Sandbox Code Playgroud)

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

User user = new User("typedUserId", "typedPassword");
System.out.println(accounts.contains(user));
Run Code Online (Sandbox Code Playgroud)