是否可以在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(
}
谢谢!
不会。增强的for
循环隐藏了循环的当前索引。您需要使用使用索引的基本 for 循环。
这是一种方法,通过自己跟踪索引,然后使用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>
为“索引”的概念实际上只对列表有意义)。
虽然你可以做这样的事情,但这将是非常次优的。考虑该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 命名标准