迭代ArrayList中的连续对象对

时间:2015-07-04 14:56:51

标签: java arraylist

我想从ArrayList获取对象,因此我可以在每个对象的元素之间执行计算。理想情况下,它应该迭代对象对。例如,在带有{obj1,obj2,obj3,obj4}的List中,它应该遍历{obj1,obj2},{obj2,obj3}和{obj3,obj4}。

到目前为止,我所尝试的内容如下:

 $scope.setPagingData = function(data, page, pageSize) {
            var pagedData = data.slice((page - 1) * pageSize, page * pageSize);
            $scope.myData = pagedData;

            $scope.totalServerItems = data.length;
            if (!$scope.$$phase) {
              $scope.$apply();
            }
          };

 $scope.gridOptions = {
            data: 'source',
            enablePaging: true,
            pagingOptions: $scope.pagingOptions,
            showFooter: true
          };

这里,它只是迭代为{obj1,obj2}和{obj3,obj4}。我该如何解决这个问题?

非常感谢所有帮助。谢谢!

5 个答案:

答案 0 :(得分:7)

一个非常正常的循环,除了你需要循环到list.size() - 1 在数组的最后 元素之前。

public ArrayList<Double> calculateSum(ArrayList<Iter> list) {
    ArrayList<Double> sums = new ArrayList<>();

    for (int i = 0; i < list.size() - 1; i++) {
        double sum = list.get(i).getValue() + list.get(i + 1).getValue();
        sums.add(sum);
    }
    return sums;
}

修改

在这种情况下使用迭代器将 比执行正常循环更快,只会使逻辑变得不必要地复杂并且很容易引入错误。

答案 1 :(得分:2)

对戴维德的回答略作修改

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

因为OP想要{obj1,obj2} {obj2,obj3} ......等等

使用迭代器

itr = list.iterator();
while(itr.hasNext()) {
   Double x = itr.next();
   if(itr.hasNext()){
      x+= itr.next();
      sum.add(x);}
   itr.previous();
  }

不建议这样做。

答案 2 :(得分:0)

只需使用for循环并在最后一个元素之前停止。

for (int i = 0; i < iter.size() - 1; i++) {
    Iter first = iter.get(i);
    Iter second = iter.get(i + 1);
    // Your code here
}

答案 3 :(得分:0)

试试这个: -

public ArrayList<Double> calculateSum(ArrayList<Iter> inputList) {
    ArrayList<Double> sums = new ArrayList<Double>();
    int inputSize =  inputList.size(); // size should be saved as an int , instead of calling size() over the list again and again in for loop 
    int incVar = 1; // 1 incremented value
    double sum = 0.0d;
    for(int i = 0; incVar < inputSize; i++,incVar++){
          sum = inputList.get(i).getValue() + inputList.get(incVar).getValue();
          sums.add(sum);
    }
    return sums;
}

答案 4 :(得分:0)

 public static ArrayList<Double> calculateSum(ArrayList<Iter> iter) {
     ListIterator<Iter> it = iter.listIterator();
     ArrayList<Double> sums = new ArrayList<>();
     if (it.hasNext()) {
         double prev = it.next().getValue();
         while (it.hasNext()) {
             double current = it.next().getValue();
             double sum = prev + current;
             sums.add(sum);
             prev = current;
         }
     }
     return sums;
 }