这是一个关于如何在需要查找一个成员变量具有特定值的对象列表中实现equals方法的问题。这里是一份已实现equals方法的对象:
```html
现在,如果我想在列表中查找某些内容,我会像这样做:
但也许这个实现方案会更好?
```html
I have an object where I've implemented equals:
```class User {
private String id;
public User(id) {
this.id = id;
}
public boolean equals(Object obj) {
if (!(obj instanceof User)) {
return false;
}
return ((User)obj).id.equals(this.id);
}
}
现在,如果我想在列表中查找某些内容,我会像这样做:
public function userExists(String id) {
List<Users> users = getAllUsers();
return users.contains(new User(id));
}
但也许这个实现方案会更好?
class User {
private String id;
public boolean equals(Object obj) {
if (!(obj instanceof User)) {
return false;
}
if (obj instanceof String) {
return ((String)obj).equals(this.id);
}
return ((User)obj).id.equals(this.id);
}
}
使用这个替代方案:
public function userExists(String id) {
List<Users> users = getAllUsers();
return users.contains(id);
}
Collections
的更加频繁地使用,越来越多的解决方法被打包进去,我认为第二种技术是一个__bug__而不是一个好处。 - Edwin Buck