Java Arraylist使用元素

Wis*_*ish 1 java arrays arraylist

我有一个ArrayListString[].

每个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

有人可以帮忙吗?

Joa*_*uer 8

你也受到了拒绝对象的困扰.

String处理数字或日期不是一个好的类型.对于我将使用的数字int(如果您只有整数值),double或者BigDecimal(如果它是货币支持或其他精确的十进制数).

对于日期我使用一个Date/ CalendarLocalDate约达时间(如果你可以使用一个外部库).

显然,这意味着您无法再将数据存储在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)