簡體   English   中英

ArrayList之和 <ArrayList<Integer> &gt;?

[英]Sum of ArrayList<ArrayList<Integer>>?

有什么辦法可以找到inputList列表的所有元素的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;
}

您不能將ArrayList強制轉換為整數基本類型,因此應刪除該行。 出於相同的原因,您不能使用增強的for循環,因為該參數是ArrayLists of Integers的ArrayList。

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

    return sum;
}

一種解決方法是使用嵌套的foreach循環遍歷外部列表和內部列表,然后簡單地將所有元素加在一起。

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

您可以使用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

以下是一些解決方案:

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();
  }
}
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;

...將無法正常工作,因為您正在嘗試將整數列表轉換為整數。

希望這是有道理的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM