gpt4 book ai didi

java - ArrayList .contains() 不起作用

转载 作者:行者123 更新时间:2023-12-01 11:20:42 26 4
gpt4 key购买 nike

我有这组消息,我想用从 API 调用获得的新消息来更新它。我正在迭代获得的数组,然后检查消息是否已在 ArrayList 中。如果没有,我会将其添加到列表中。

但是,由于某种未知的原因,它不起作用。它复制列表中的所有项目,但新项目永远不存在。我无法弄清楚我的 equals()hashCode() 实现出了什么问题。

    @Override
public boolean equals(Object object) {
boolean result = false;
if (object == null || object.getClass() != getClass()) {
result = false;
} else {
Message mess = (Message) object;
if (this.id == mess.getId() && this.extid == mess.getExtid()) {
result = true;
}
}

return result;
}

@Override
public int hashCode() {
int hash = 3;
hash = 7 * hash + this.id.hashCode();
hash = 7 * hash + this.extid.hashCode();
return hash;
}

populateData():

    private void populateData(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray ArrayMessages = jsonObject.getJSONArray("messages");

Gson gson = new Gson();

Message[] messages = gson.fromJson(ArrayMessages.toString(), Message[].class);

for (Message message : messages) {
if(!messageList.contains(message)) {
messageList.add(message);
}
}

adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}

最佳答案

idextId 是什么类型?您应该将它们与 equals() 而不是 == 进行比较,并且使用 set 可以避免检查元素是否已经在集合,因为集合不允许重复。

关于java - ArrayList .contains() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255377/

26 4 0