2013-03-01 3 views
3

Я повторяю набор. Если значение CarDetail не установлено, я хочу, чтобы цикл снова начинался со следующего CarDetail. Но как-то мой продолжения не будет работать. Невозможно использовать продолжение с итератором?Итерация через множество и продолжение

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; –

+0

Это выглядит хорошо для меня. Пожалуйста, добавьте информацию о том, что именно неожиданно и как вы это доказываете. – poitroae

+1

Не могли бы вы попытаться перефразировать то, что вы пытаетесь сделать? Могу ли я предложить использовать расширенные циклы 'for'? 'for (CarDetail detail: iter) {' будет делать великолепно! Или еще лучше 'for (подробнее о деталях CarDetail: подробности) {' – corsiKa

ответ

2

Нет ничего плохого в использовании продолжения с помощью итераторов. Вы даже можете использовать это с расширенной цикл (для каждого цикла):

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 
} 

Как вы уверены, что по-прежнему заявление игнорируется в коде вы вывесили? С несколькими небольшими заявлениями println мы можем проверить, работает ли работа continue так, как мы ожидаем.

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