是否可以在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(
}
谢谢!
答案 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命名标准