最后一次迭代用于增强for循环

时间:2016-12-14 03:23:21

标签: java collections

我试图使用增强的for循环遍历Iterable,但我无法确定何时是最后一个正在处理的值。

     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循环中的

不是解决方案。

1 个答案:

答案 0 :(得分:3)

如果您想知道迭代最后一个元素的时间,请使用标准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
    }
}