ArrayList的总和<arraylist <integer>&gt;?

时间:2017-05-04 17:04:33

标签: java arraylist data-structures foreach

有没有办法找到inputList内所有列表元素的总和?

这是我尝试过的,但这只适用于我假设的常规ArrayList Integer。

static int add(ArrayList<ArrayList<Integer>> inputList) {
    int a = (int) inputList;
    int sum = 0;

    for(int d : a)
        sum = sum + d;

    return sum;
}

6 个答案:

答案 0 :(得分:4)

您无法将ArrayList强制转换为整数基元类型,因此您应该删除该行。出于同样的原因,您无法使用增强的for循环,因为该参数是整数ArrayLists的ArrayList。

static int add(ArrayList<ArrayList<Integer>> inputList) {
    int sum = 0;
    for(ArrayList<Integer> nestedList : inputList) {
        for (int n : nestedList) sum += n;
    }

    return sum;
}

答案 1 :(得分:3)

一种方法是使用嵌套的foreach循环迭代外部列表和内部列表,然后简单地将所有元素添加到一起。

static int add(ArrayList<ArrayList<Integer>> inputList) {
       int sum = 0;
       for (ArrayList<Integer> list : inputList) {
           for (int number : list) {
                sum += number;
           }
       } 
       return sum;
}

答案 2 :(得分:3)

您可以使用Java8流来查找总和,如下面的代码所示,只需一行(按照注释):

int sum = inputList.stream().//get the stream for the outer list
           flatMapToInt(list -> list.stream().
            mapToInt(value -> value)).//flatten the inner list
            sum();//get the sum

答案 3 :(得分:3)

以下是一些解决方案:

import java.util.List;

class Class {
  public int addViaLoops(List<List<Integer>> inputList) {
    int sum = 0;
    for (final List<Integer> l : inputList) {
      for (final int i : l) {
        sum += i;
      }
    }
    return sum;
  }

  public int addViaStreams(List<List<Integer>> inputList) {
    return inputList.stream()
      .flatMapToInt(l -> l.stream()
        .mapToInt(i -> i))
      .sum();
  }
}

答案 4 :(得分:2)

static int add(ArrayList<ArrayList<Integer>> inputList){

    int sum = 0; // initiate sum to zero.

    for (ArrayList<Integer> list: inputList) {

        for (Integer i: list) {

            sum += i.intValue(); // intValue() might not be necessary, but it doesn't hurt
        }
    }

    return sum;
 }

上面的代码应该非常简单。使用foreach循环,我们可以迭代inputList中的所有列表,然后我们可以迭代每个列表并将其值添加到sum

你在哪里......

int a = (int) inputList;int a = (int) inputList;

int sum = 0;
for(int d : a)
    sum = sum + d;

...因为您尝试将整数列表转换为int而无法正常工作。

希望这是有道理的。

答案 5 :(得分:2)

 inputList.stream().flatMap(Collection::stream).mapToInt(i -> i).sum();