2016-12-14 132 views
0

我使用增强的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(); 

中的for循环是不是一个解决方案为了这。

回答

2

如果您想知道何时迭代最后一个元素,请改用标准for循环中的iterator表单。增强的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 
    } 
}