如何在Java中同时迭代两个列表?

时间:2017-11-27 11:25:50

标签: java loops arraylist

我正在尝试迭代两个 ArrayLists 来调用一个名为 findProfit(ele,c)的功能,但我对于正确的方法感到困惑。请提供所有可能的代码解决方案。

public void calProfitIndex(ArrayList<ArrayList<Package>> elemetList,ArrayList<Integer> capacity){
    ....ArrayList<Package> ele: elemetList && Integer c: capacity...{

                findProfit(ele,c);
    }
}

1 个答案:

答案 0 :(得分:0)

您希望同时迭代两个列表会倾向于建议您应该有一个复合对象列表,每个复合对象包含Package引用和整数容量。 (讲座结束)。

但如果你想同时迭代两个列表,你确实有一些选择:

1)对两个列表使用显式Iterator

Iterator<Package> pIter = elementList.iterator();
Iterator<Integer> cIter = capacity.iterator();
while (pIter.hasNext() && cIter.hasNext()) {
    Package p = pIter.next();
    Integer c = cIter.next();
        ...
}
if (pIter.hasNext()) 
    System.err.println("Too few capacity items");
if (cIter.hasNext())
    System.err.println("Too few Package items");

2)使用索引计数器:

if (elementList.size() != capacity.size())
    System.err.println("Lists aren't the same size");
else {
    for (int i = 0; i < elementList.size(); ++i){
        Package p = elementList.get(i);
        Integer c = capacity.get(i);
        ....
    }
}

3)将增强型for用于一个列表,将Iterator用于另一个列表:

Iterator<Integer> cIter = capacity.iterator();
for (Package p : elementList){
   if (!cIter.hasNext()) {
       System.err.println("Too few capacity items");
       break;
   }
   Integer c = cIter.next();
    ....
}
if (cIter.hasNext())
    System.err.println("Too few Package items");