2016-12-14 4 views
0

Я пытаюсь перебрать Iterable с помощью цикла for for, но я не могу определить, когда обрабатывается последнее значение.Последняя итерация для расширенного цикла

 public void apply(Tuple key, 
        GlobalWindow w, 
        Iterable<Tuple5<String, Long, List<Lane>, Long, Long>> itrbl, 
        Collector<Tuple5<String, Long, List<Lane>, Long, Long>> clctr) throws Exception { 
     long cachedUmlaufSekunde = 0; 
     long currentUmlaufSekunde = 0; 
     long maxUmlaufSekunde = 0; 
     for(Tuple5 tuple:itrbl) { 
      maxUmlaufSekunde = (long)tuple.getField(4); 
      currentUmlaufSekunde = ((long)tuple.getField(1)/10)*10; 
      if(currentUmlaufSekunde == (cachedUmlaufSekunde + 10)) { 
      cachedUmlaufSekunde = currentUmlaufSekunde; 
      } else { 
       cachedUmlaufSekunde = cachedUmlaufSekunde + 10; 
      } 
     } 

Многие вопросы, связанные с этой темой предлагают использовать функцию iterator.hasNext() для определения последнего элемента, но я думаю, используя что-то вроде

itrbl.iterator.hasNext(); 

внутри цикл не является решением для этого.

ответ

2

Если вы хотите узнать, когда последний элемент повторяется, используйте форму iterator в стандартном цикле for. Усовершенствованный-for будет проходить через все элементы итерации, и это невозможно определить, когда конец.

for(Iterator<Tuple5> tuplIter = iterbl.iterator(); tuplIter.hasNext();) { 
    Tuple5 tupl = tuplIter.next(); 

    // check for next 
    if(!tuplIter.hasNext()) { 
     // logic for processing the last tuple 
    } 
} 
Смежные вопросы