簡體   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