[英]How can I remove a specific object from an arrayList and how can I check if it contains this object?
[英]How can I check if an ArrayList contains an Object with a specific field value?
我有一个Objects
的ArrayList
。 我想看看该ArrayList
包含具有特定字段的Object
。
团队建设者.java
public class TeamBuilder {
public static void main(String[] args) {
Team team = new Team();
team.addMember(new TeamMember("myID"));
System.out.println(team.containsMember("myID")); //false
}
}
团队成员.java
public class TeamMember {
private String id;
public TeamMember(String id) {
this.id = id;
}
public String getID() {
return this.id;
}
@Override
public boolean equals(Object o) {
if (o instanceof TeamMember) {
o = ((TeamMember) o).getID();
}
return o.equals(this.getID());
}
}
团队.java
import java.util.ArrayList;
public class Team {
private ArrayList<TeamMember> members = new ArrayList<>();
public boolean addMember(TeamMember teamMember) {
if (members.contains(teamMember)) {
return false;
}
members.add(teamMember);
return true;
}
public boolean containsMember(String eid) {
System.out.println(members.get(0).equals(eid)); //true
System.out.println(members.contains(eid)); //false
if (members.contains(eid)) {
return true;
}
return false;
}
}
我不想使用循环,也不想覆盖arrayList.contains()
。
我期待.contains()
遍历我的TeamMember
列表,并在找到与传递的Object
相等的列表时返回true
。 这两个Objects
是相等的,但.contains()
方法返回 false。
如何优雅地检查Team
包含具有指定 ID 的TeamMember
? 我的印象是我可以避免 for 循环,因为Java 方法:在数组列表中查找对象给定已知属性值,但我无法让它工作。
最优雅的解决方案是
a.equals(b)
那么b.equals(a)
必须为真。hashCode()
并且它应该使用与 equals 方法相同的字段。HashMap<String, TeamMember>
匹配 ID 字符串 TeamMember 对象。get(String key)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.