我想从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}。我该如何解决这个问题?
非常感谢所有帮助。谢谢!
答案 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;
}