最近我一直在處理有日期(實際上是字符串)和ID的對象列表。日期以字符串形式存儲:「yyyy-mm-dd」。 所以我有一個很長的名單(約80 000元)看起來像這樣:刪除列表中的重複項時遇到問題
[{id:"15655454", date:"2014-11-15"}, {id:"15655454", date:"2014-11-15"}, {id:"15655454", date:"2014-11-15"}, {id:"15655454", date:"2014-10-17"}, {id:"15655454", date:"2014-10-17"}, {id:"15655454", date:"2014-10-17"}, {id:"15655454", date:"2014-10-17"}, {id:"15655454", date:"2014-10-17"}, {id:"15655455", date:"2014-09-23"}, ...]
它實際上是一個Java類,有點複雜,但全球的想法是在這裏。 (它確實不僅僅是兩個字段,但我認爲這並不重要)
正如您所看到的,它按ID排序。
我想要做的是: - 如果一個ID有多個日期:只保留最新的日期。 - 如果一個ID有幾個相同的最新日期:全部保留。
所以這裏是我試過到目前爲止:
List<Element> results = new ArrayList<Element>();
results.initiateList();
int count = 0;
while(count < results.size()-1) {
if (results.get(count).getID().equals(results.get(count+1).getID())) {
String[] dateI = results.get(count).getDate().split("-");
String[] dateJ = results.get(count+1).getDate().split("-");
int yearI = Integer.parseInt(dateI[0]);
int yearJ = Integer.parseInt(dateJ[0]);
int monthI = Integer.parseInt(dateI[1]);
int monthJ = Integer.parseInt(dateJ[1]);
int dayI = Integer.parseInt(dateI[2]);
int dayJ = Integer.parseInt(dateJ[2]);
if (results.get(count).getDate()== null) {
results.remove(count);
if (count != 0) {
count--;
}
} else if (results.get(count+1).getDate()== null) {
results.remove(count+1);
} else if (yearI > yearJ) {
results.remove(count+1);
} else if (yearI < yearJ) {
results.remove(count);
if (count != 0) {
count--;
}
} else if (yearI == yearJ && monthI > monthJ) {
results.remove(count+1);
} else if (yearI == yearJ && monthI < monthJ) {
results.remove(count);
if (count != 0) {
count--;
}
} else if (yearI == yearJ && monthI == monthJ && dayI > dayJ) {
results.remove(count+1);
} else if (yearI == yearJ && monthI == monthJ && monthI < monthJ) {
results.remove(count);
if (count != 0) {
count--;
}
} else if (yearI == yearJ && monthI == monthJ && dayI == dayJ) {
count++;
}
} else {
count++;
}
}
但是,這並不工作,我不明白爲什麼。我覺得我已經考慮過所有可能的情況,但仍然沒有刪除所有重複的內容。問題是我仍然有一些重複,例如,列表仍然包含一個單一ID的幾個不同的日期。
方法initiateList(),getDate()和getID()被正確地實現,因爲我在很多其他不同的地方使用它們,並且它們在那裏很好地工作。 InitiateList()把所有的元素放在列表中,如果我試圖在控制檯上顯示它們,它可以正常工作。
我看不出有什麼不對的,而循環,但我想我錯過了一些東西(它可能是非常基本的...)
嘗試使用調試器。並逐步查看它。創建一個代碼失敗的小例子(並將其添加到您的問題中)。 – MrSmith42
是你能夠使用一個集合,爲什麼不實現equals,compareTo和使用Collections方法??? –
考慮使用'Map'來存儲你的''''''''''''對。如果存在'id',那麼檢查'date'是否是最新的 - 是的,存儲它,否則忽略。此外,解析你的日期像'LocalDate',讓生活更輕鬆。 – Abubakkar