繁体   English   中英

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

[英]Last iteration for enhanced for loop

我试图使用增强的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循环中的内容不是解决方案。

如果你想知道迭代最后一个元素的时间,那么在标准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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM