2016-12-14 2 views
0

향상된 for 루프를 사용하여 Iterable을 반복하려고하지만 처리중인 마지막 값을 확인할 수 없습니다. 이 주제와 관련된향상된 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

마지막 요소가 반복되는 시점을 알고 싶다면 대신 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 
    } 
} 
관련 문제