2013-05-28 46 views
3

是否可以在java中嵌套foreach語句,並在外部foreach循環所在的當前索引處啓動嵌套語句?java中嵌套的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

您應該重新檢查驗收。蒂姆S正在做你正在問的東西。基本思想可以通過索引訪問而不需要使用子列表。 – ChiefTwoPencils

回答

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>上,因爲「索引」的概念對於列表確實是有意義的)。

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命名標準