MongoIterable.forEach 对比 Iterable.forEach
MongoIterable.forEach vs. Iterable.forEach
MongoIterable.forEach
需要 Block
which is very similar to 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
接口定义,类似于:MongoIterable.forEach(Consumer<? super TResult> consumer)
?更好的是 - 为什么 forEach
在 MongoIterable
中呢?
Java 驱动程序仍然支持 Java 6 作为目标。因此,尽管尝试使 3.0 驱动程序 Java 8 和 lambda 友好,但我们无法使用实际的 Java 8 接口。
MongoIterable.forEach
需要 Block
which is very similar to 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
接口定义,类似于:MongoIterable.forEach(Consumer<? super TResult> consumer)
?更好的是 - 为什么 forEach
在 MongoIterable
中呢?
Java 驱动程序仍然支持 Java 6 作为目标。因此,尽管尝试使 3.0 驱动程序 Java 8 和 lambda 友好,但我们无法使用实际的 Java 8 接口。