我有一个与ping相关的Arraylist,这些是链接到名称的日期,我想删除名称的所有重复项并保留名称的最近日期。ArrayList重复删除
代码
private ArrayList <String> deleteDuplicates() {
ArrayList <Ping> tempPings = new ArrayList <Ping>();
tempPings.addAll(jaws.pastMonth());
for (int i = 0; i < tempPings.size(); i++) {
Ping tempPing = tempPings.get(i);
for (int j = i + 1; j < tempPings.size() - 1; j++) {
Ping tempPing2 = tempPings.get(j);
if (tempPing.getName().equals(tempPing2.getName())) {
if (changePingToDate(tempPing2).before(changePingToDate(tempPing))) {
tempPings.remove(j);
}
}
}
}
return pingToNames(tempPings);
}
changePingToDate()是将日期字符串转换成公历的方法。
当我使用这段代码时,它删除了大部分重复项,但是每次循环中仍有一些剩余项。我也尝试过,没有比较日期和仍然是同样的问题。谁能帮忙?
感谢您的帮助!
@aribeiro嗨,我已经检查了答案,它并没有帮助我的问题,我的.equals似乎工作正常,名称是完全相同的,例如“玛丽李”多次,它似乎选择选择删除哪些。 –
您正在调用'.remove()',它可以修改列表的大小和**您正在查看的索引**。你正在跳过价值。 –
使用迭代器。为了这个原因,我不想在这里添加另一个答案。 SO和Google都有大量的资源可用。 –