2013-03-01 54 views
3

我遍歷一個Set。 如果未設置CarDetail的值,我希望循環再次以下一個CarDetail開始。 但不知何故,我繼續不會工作。是否有可能使用迭代器繼續?遍歷set並繼續

final Set<CarDetail> tmpDetail = new HashSet<CarDetail>(details); 
    for(Iterator<CarDetail> iter = tmpDetail.iterator(); iter.hasNext();){      
     CarDetail detail = iter.next(); 
     if(detail.getBack() == null){ 
     continue; 
    } 
    ... do something 
} 
+0

這只是一個For循環。像任何for循環一樣,你可以使用continue; – 2013-03-01 18:06:30

+0

我看起來很好。請添加有關意外事件的信息,以及您如何證明這一點。 – poitroae 2013-03-01 18:07:10

+1

你可以嘗試重新措辭你正在嘗試做什麼?我可以建議使用增強的'for'循環嗎? '(CarDetail detail:iter){'會做得非常出色!或者更好的是(CarDetail detail:details){' – corsiKa 2013-03-01 18:07:19

回答

2

繼續使用迭代器沒有任何問題。你甚至可以用一個增強的for循環(每個循環)使用此:

final Set<CarDetail> tmpDetail = new HashSet<CarDetail>(details); 
for(CarDetail detail : tmpDetail) {       
     if(detail.getBack() == null) { 
     System.out.println("Skipping over " + detail.toString()); 
     continue; 
     } 
     System.out.println("Processing car detail: " + detail.toString()); 
    //... do something 
} 

你怎麼確保continue語句中的代碼被忽略你貼? 通過一些小的println語句,我們可以驗證繼續是否按照我們的預期工作。

0

如果您願意,您可以在循環中直接循環訪問Set,但不會得到Iterator並在循環中使用continue。下面是一個例子:

Set<Integer> intSet = new HashSet<Integer>(); 
intSet.add(1);intSet.add(2);intSet.add(3); 

for(Integer setElem : intSet) 
{ 
    if(setElem.intValue() == 2) continue; 

    System.out.println("Current set element is " + setElem); 
} 

僅打印

Current set element is 1 
Current set element is 3 

因爲有一個continue如果它是2。由於沒有在Set訂貨的保證,輸出很可能也有

Current set element is 3 
Current set element is 1