【问题标题】:Get the current value of an ArrayList - Java获取 ArrayList 的当前值 - Java
【发布时间】:2020-06-13 15:40:31
【问题描述】:

我想获取 ArrayList 的当前值。换句话说,我想遍历我的列表并获取循环运行的实例的当前值 + 所有先前的值。这是我的清单:

ArrayList<Double> list = new ArrayList<>(); 
list.add(10.0);
list.add(10.0);
list.add(10.0);
list.add(10.0);
list.add(10.0);

我是这样循环的:

ArrayList<Double> list1 = new ArrayList<>(); 

for (int i = 1; i < list.size(); i++) {
     list1.add(list.get(i) + list.get(i - 1));
}

System.out.print(list1);

我的问题当然是我只得到当前值+之前的值。但我想获得当前值 + 所有以前的值,因此 ArrayList "list1" 由 [10, 20, 30, 40, 50] 和而不是 [20, 20, 20, 20, 20] 组成,现在是这种情况。

我仍在学习,所以我知道可能有一种简单/基本的方法可以做到这一点,但不幸的是,我自己无法提出解决方案。

【问题讨论】:

  • 没有“ArrayList 的当前值”之类的东西。

标签: java for-loop arraylist


【解决方案1】:

您想使用变量来添加值,然后将其添加到列表中

double sum = 0;
for (int i = 0; i < list.size(); i++) {
    sum += list.get(i);
    list1.add(sum);
}

如果你想要整个数组,那么使用 for each 循环会更好。

double sum = 0;
for (Double value: list) {
    sum += value;
    list1.add(sum);
}

【讨论】:

  • 感谢您提供的信息和代码。这解决了我的问题!
  • OP 由于 list.get(i - 1) 调用而从 1 开始循环。您应该将代码修复为从 0 开始循环。
  • 为什么print(list1) 不是打印列表的正确方法?
  • @Andreas 感谢您指出循环的问题,我不得不将打印评论归咎于旧习惯:)
【解决方案2】:

您还可以使用subList() 和流。

List<Double> list1 = IntStream.rangeClosed(1, list.size())
        .mapToObj(i -> list.subList(0, i).stream().mapToDouble(Double::doubleValue).sum())
        .collect(Collectors.toList());
System.out.println(list1);

【讨论】:

  • 很好,我没想到我们的子列表,好东西。每天学习新东西。
【解决方案3】:

要解决这个问题,你需要首先从索引 0 而不是 1 开始迭代。然后你可以做的只是在当前索引大于零的情况下计算先前的总和。您可以通过迭代所有先前元素并添加它们的总和来计算先前的总和。

        ArrayList<Double> list = new ArrayList<>(Arrays.asList(10.0, 10.0, 10.0, 10.0, 10.0));

        ArrayList<Double> sums = new ArrayList<>();

        for (int index = 0; index  < list.size(); index++) {
            double previousSum = index == 0 ? 0 : IntStream.range(0, index)
                    .mapToDouble(list::get).sum();

            double valueAtIndex = list.get(index);

            sums.add(previousSum + valueAtIndex);
        }

输出

[10.0, 20.0, 30.0, 40.0, 50.0]

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 2013-09-04
    • 2019-05-16
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多