java中嵌套的foreach语句

时间:2013-05-28 22:36:53

标签: java for-loop foreach

是否可以在java中嵌套foreach语句并在外部foreach循环所在的当前索引处启动嵌套语句?

所以,如果我有

List<myObj> myObjList = new ArrayList<myObj>();

for (myObj o : myObjList){
    // how do I start the nested for loop at the current spot in the list?
    for(

}

谢谢!

3 个答案:

答案 0 :(得分:6)

没有。 Enhanced for loops隐藏循环的当前索引。您需要使用使用索引的basic for loop

答案 1 :(得分:4)

这是通过自己跟踪索引,然后使用subList在正确的位置启动内循环来实现此目的的方法:

int i = 0;
for (myObj o1 : myObjList) {
    for (myObj o2 : myObjList.subList(i, myObjList.size())) {
        // do something
    }
    i++;
}

我认为这比使用基本for循环更清楚,但这肯定存在争议。但是,两者都应该有效,所以选择权归你所有。请注意,如果您使用的集合未实现List<E>,则无效(subList已在List<E>上定义,因为“索引”的概念实际上只对列表有意义)。

答案 2 :(得分:1)

虽然你可以做这样的事情,但这将是非常次优的。考虑indexOf方法将遍历整个列表(再次!)以查找对象。另请注意,它取决于myObjList是有序集合(list):

List<myObj> myObjList = new ArrayList<myObj>();

for (myObj o : myObjList){
    int idx = myObjList.indexOf(o);
    for(myObj blah : myObjList.subList(idx, myObjList.size()) {
        ...
    }

}

好多了:

int myObjListSize = myObjList.size();
for (int outerIndex = 0; outerIndex < myObjListSize ; outerIndex++){
    for(int innerIndex = outerIndex; innerIndex < myObjListSize ; innerIndex++) {
        myObj o = myObjList.get(innerIndex);
    }

}

其他说明:class myObj应大写为class MyObj以符合Java命名标准