今日学习的时候看到这两段代码
public Iterable<FileChannelRecordBatch> batchesFrom(final int start) {
return () -> batchIterator(start);
}
@Override
public AbstractIterator<FileChannelRecordBatch> batchIterator() {
return batchIterator(start);
}
另一段
for (FileChannelRecordBatch batch : batchesFrom(startingPosition)) {
long offset = batch.lastOffset();
if (offset >= targetOffset)
return new LogOffsetPosition(offset, batch.position(), batch.sizeInBytes());
}
首先看到第二段的时候,本来我以为batchesFrom(startingPosition)
得到的是一个数组或者一个list。但是其实得到的是一个Iterable<FileChannelRecordBatch>
。其实List之所以可以用增强for循环的形式写主要也是因为实现了Iterable
的接口,所以直接是Iterable的引用也是可以使用增强for循环的。
然后我认为一个精妙的地方是 () -> batchIterator(start)这是一种函数式的写法,其实可以认为和一个内部匿名类没有区别,但更简洁。
网友评论