Вы тоже страдаете от отрицания объекта .
String
не подходит для обработки чисел или дат. Для числа я бы использовал int
(если у вас есть только целочисленные значения), double
или BigDecimal
(если это денежная сумма или другое точное десятичное число).
В качестве даты я бы использовал Date
/ Calendar
или LocalDate
из Время Joda (если вы можете использовать внешнюю библиотеку).
Очевидно, это означает, что вы больше не можете хранить свои данные в 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());