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