工作笔记(二)

今日学习的时候看到这两段代码

  public Iterable batchesFrom(final int start) {
        return () -> batchIterator(start);
    }

    @Override
    public AbstractIterator 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。其实List之所以可以用增强for循环的形式写主要也是因为实现了Iterable的接口,所以直接是Iterable的引用也是可以使用增强for循环的。
然后我认为一个精妙的地方是 () -> batchIterator(start)这是一种函数式的写法,其实可以认为和一个内部匿名类没有区别,但更简洁。

你可能感兴趣的:(工作笔记(二))