你也是,患有object denial。
String
不是處理數字或日期的好類型。對於一個數字,我會使用int
(如果您只有整數值),double
或BigDecimal
(如果它是貨幣金額或其他確切的十進制數)。
對於日期,我會使用Date
/Calendar
或LocalDate
從Joda Time(如果您可以使用外部庫)。
顯然這意味着您不能再將數據存儲在String[]
中,但對於任何類型的結構化數據來說,這不是一個合適的類型。
你會想要寫一個反映你的價值觀是什麼類:
public class DatedValue {
private final Date date;
private final BigDecimal value;
public DatedValue(final Date date, final BigDecimal value) {
this.date = date;
this.value = value;
}
public Date getDate() {
return date;
}
public BigDecimal getValue() {
return value;
}
}
然後,你可以簡單地通過循環原ArrayList<DatedValue>
創造新的價值:
Map<Date,DatedValue> result = new LinkedHashMap<Date,DatedValue>();
for(DatedValue dv : datedValues) {
DatedValue newDV = result.get(dv.getDate());
if (newDV == null) {
newDV = dv;
} else {
newDV = new DatedValue(dv.getDate(), dv.getValue().add(newDV.getValue()));
}
result.put(dv.getDate(), newDV);
}
List<DatedValue> sums = new ArrayList<DatedValue>(result.values());
你有什麼迄今所做?任何您需要幫助的具體問題? – Jacob 2011-05-30 07:32:25
沒有太多......實際上這個數據來自sqlite數據庫。正值是在一個表中,負值是來自其他表。也許這可能與SQL查詢,但我不明白sql那麼多,用arraylist它會更容易做? – Wish 2011-05-30 07:38:54
真的,在SQL中執行它。請。 – Waldheinz 2011-05-30 08:36:14