Wis*_*ish 1 java arrays arraylist
我有一个ArrayList的String[].
每个String[]包含两个值:值和日期.
如果我打印它,它看起来像这样:
value | date -------|---------- 357.0 | 2011/05/30 -234.0 | 2011/05/31 -123.0 | 2011/05/30
我想创建一个新的ArrayList,在同一日期的所有值相加.像这样:
value | date -------|---------- 234.0 | 2011/05/30 -234.0 | 2011/05/31
有人可以帮忙吗?
你也受到了拒绝对象的困扰.
String处理数字或日期不是一个好的类型.对于我将使用的数字int(如果您只有整数值),double或者BigDecimal(如果它是货币支持或其他精确的十进制数).
对于日期我使用一个Date/ Calendar或LocalDate从约达时间(如果你可以使用一个外部库).
显然,这意味着您无法再将数据存储在a中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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过迭代原始来简单地创建新值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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |