映射到 Java 8 中的运行总和

2024-01-09

如果我有一个集合:

List<Long> numbers = asList(2, 2, 4, 5);

我如何映射/处理这些以建立运行总计。产生类似的东西:

List<Long> runningTotals = asList(2, 4, 8, 13);

更好的是,我如何构建一个列表(例如元组),以便保留原始内容:

((2 -> 2), (2 -> 4), (4 -> 8), (5 -> 13));

您不需要 Java 8 来执行此操作。事实上,这个问题不太适合流,因为计算是有状态的,因为它取决于先前元素的总和,因此您无法从并行化等方面获得优势。

您也可以只使用普通的旧循环:

ListIterator<Long> it = list.listIterator();
Long previous = it.next();  // Assuming the list isn't empty.
while (it.hasNext()) {
  it.set(previous += it.next());
}

就第二个要求而言,您真的需要保留元组中的原始元素吗?您只需从其前一个元素中减去运行总计列表中的每个元素即可恢复原始元素:

AbstractList<Long> something = new AbstractList<Long>() {
  @Override public int size() { return list.size(); }
  @Override public Long get(int i) {
    if (i > 0) {
      return list.get(i) - list.get(i - 1);
    } else {
      return list.get(i);
    }
  }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

映射到 Java 8 中的运行总和 的相关文章

随机推荐