3

是否可以在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(

}

谢谢!

4

3 回答 3

6

不会。增强的for循环隐藏了循环的当前索引。您需要使用使用索引的基本 for 循环。

于 2013-05-28T22:38:22.703 回答
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>为“索引”的概念实际上只对列表有意义)。

于 2013-05-28T22:58:58.877 回答
1

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

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 命名标准

于 2013-05-28T22:47:05.887 回答