迭代ArrayList中的连续对象对

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

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

public class Sum { public ArrayList calculateSum(ArrayList iter) { ListIterator it = iter.listIterator(); ArrayList sums = new ArrayList(); while (it.hasNext()) { Iter it1 = it.next(); Iter it2; if(it.hasNext()){ it2 = it.next(); } else { break; } double sum = it1.getValue() + it2.getValue(); sums.add(sum); } return sums; } } 

这里,它只是迭代为{obj1,obj2}和{obj3,obj4}。 我怎样才能解决这个问题?

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

一个非常普通的循环,除了你需要循环到list.size() - 1 ,数组的前一个元素。

 public ArrayList calculateSum(ArrayList list) { ArrayList 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; } 

编辑

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

对达维德的答案略有修改

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

不建议这样做。

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

 for (int i = 0; i < iter.size() - 1; i++) { Iter first = iter.get(i); Iter second = iter.get(i + 1); // Your code here } 
  public static ArrayList calculateSum(ArrayList iter) { ListIterator it = iter.listIterator(); ArrayList 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; } 

试试这个 :-

 public ArrayList calculateSum(ArrayList inputList) { ArrayList sums = new ArrayList(); 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; }