【发布时间】:2016-07-08 15:01:42
【问题描述】:
我有一个带有 ping 的 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 似乎工作正常,名称完全相同,例如“Mary Lee”多次和它似乎在挑选要删除的内容。
-
您正在调用
.remove(),它会在您遍历列表时修改列表的大小和您正在查看的索引。您正在跳过值。 -
使用迭代器。我不想仅仅为了它而在这里添加另一个答案。 SO 和 Google 上都有大量可用资源。
-
@cricket_007 好的,谢谢,我不完全确定我是否理解,如果它在我比较它之后删除值,为什么会改变我正在查看的索引?您对如何解决此问题有任何想法吗?谢谢。
-
或将所有值转储到
Set以删除重复项。
标签: java date arraylist duplicates