MongoIterable.forEach
需要Block
与 Java 8 非常相似的 a Consumer
。它们相似到足以导致问题,例如,以下内容无法编译:
MongoIterable<Document> result = collection.find(...);
result.forEach(System.out::println);
因为编译器无法在Iterable.forEach( Consumer )
and之间做出决定MongoIterable.forEach( Block )
。解决此问题需要解决方法,例如显式键入参数:
Block<Document> printer = System.out::println;
result.forEach(printer);
或者,将MongoIterable
其视为普通Stream
:
StreamSupport.stream(result.spliterator(), false).forEach(System.out::println);
为什么MongoIterable.forEach
不使用Consumer
接口定义,例如:MongoIterable.forEach(Consumer<? super TResult> consumer)
?更好的是——为什么要forEach
加入MongoIterable
呢?