ArrayList removeAll()不删除对象

我有成员类的简单ArrayLists:

ArrayList<Member> mGroupMembers = new ArrayList<>();

ArrayList<Member> mFriends = new ArrayList<>();

会员等级:

public class Member {

private String userUID;

private String userName;

public String getUserUID() {

return userUID;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public void setUserUID(String userUID) {

this.userUID = userUID;

}

}

朋友的ArrayList包含所有用户朋友。我只希望从好友列表中删除组成员(如果存在):

mFriends.removeAll(mGroupMembers);

但这对mFriends列表没有任何帮助…

查看日志语句,该朋友实际上确实出现在mGroupMember列表中。

为什么不起作用?

回答:

如何确定2个成员相等?我猜它们是否具有相同的ID,您认为它们相等,但是Java希望它们成为内存中的完全相同的引用,而事实并非如此。要更正此问题,您可以重写equals函数以使它们在ID相等时返回:

public class Member {

//..

@Override

public boolean equals(Object anObject) {

if (!(anObject instanceof Member)) {

return false;

}

Member otherMember = (Member)anObject;

return otherMember.getUserUID().equals(getUserUID());

}

}

另外,当您覆盖时.equals,建议也覆盖hashCode,以使对象在诸如Set或的哈希函数中也能正常工作Map

以上是 ArrayList removeAll()不删除对象 的全部内容, 来源链接: utcz.com/qa/423190.html

回到顶部