MongoIterable.forEach
需要 Block
这与 Java 8 Consumer
非常相似.
它们相似到足以导致问题,例如,以下内容无法编译:
MongoIterable<Document> result = collection.find(...);
result.forEach(System.out::println);
因为编译器无法在
Iterable.forEach( Consumer )
之间做出决定和 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
定义接口(interface),类似于:MongoIterable.forEach(Consumer<? super TResult> consumer)
?更好 - 为什么有 forEach
在 MongoIterable
有吗?
最佳答案
Java 驱动程序仍然支持 Java 6 作为目标。因此,虽然尝试使 3.0 驱动程序对 Java 8 和 lambda 友好,但我们不能使用实际的 Java 8 接口(interface)。
关于mongodb-java - MongoIterable.forEach 与 Iterable.forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34665211/