【问题标题】:How to iterate two lists in Java Simultaneously? [closed]如何同时迭代Java中的两个列表? [关闭]
【发布时间】:2017-11-27 11:25:50
【问题描述】:

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

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

                findProfit(ele,c);
    }
}

【问题讨论】:

  • 循环内循环
  • "Gimme teh codez" 问题在 SO 上是不需要的
  • 我需要同时迭代两个

标签: java loops arraylist


【解决方案1】:

你可以通过列表迭代器来做

public void calProfitIndex(ArrayList<ArrayList<Package>> elemetList,ArrayList<Integer> capacity){
        Iterator elemetListIterator=elemetList.iterator();
        Iterator capacityIterator=capacity.iterator();
        while(elemetListIterator.hasNext() && capacityIterator.hasNext()) {
            ArrayList<Package> elemet=(ArrayList<Package>) elemetListIterator.next();
            Integer cap=(Integer) capacityIterator.next();
        }
    }   

【讨论】:

    【解决方案2】:

    您想要同时迭代两个列表往往表明您应该有一个复合对象列表,每个包含一个Package 引用和一个整数容量。 (讲座结束)。

    但如果您想同时迭代两个列表,您确实有几个选择:

    1) 对两个列表使用显式 Iterators:

    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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 2016-08-28
      • 2017-06-18
      • 2021-08-25
      • 2021-10-04
      相关资源
      最近更新 更多