mongodb-java - MongoIterable.forEach 与 Iterable.forEach

标签 mongodb-java mongo-java-driver

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) ?更好 - 为什么有 forEachMongoIterable有吗?

最佳答案

Java 驱动程序仍然支持 Java 6 作为目标。因此,虽然尝试使 3.0 驱动程序对 Java 8 和 lambda 友好,但我们不能使用实际的 Java 8 接口(interface)。

关于mongodb-java - MongoIterable.forEach 与 Iterable.forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34665211/

相关文章:

Java8 - 显式类型如何匹配一种变体 - 而不是其他类型?

java - 如何使用Mongo Java驱动@BsonCreator注解?

spring - 如何将低级驱动程序 API 与 Spring Data MongoDB 结合使用

java - MongoDB Java API 3.0 关闭游标

java - MongoDB Java 驱动程序副本集故障转移

json - 如何仅使用 mongo-java-driver 执行 MongoDB native 查询(JSON)?

java - MongoDB Java 驱动程序聚合框架使用 $match 和 $text $search 但首先需要 $project

mongodb - Mongo 链接过滤器

java - 使用 $elemMatch 时如何投影第一个子文档以外的内容

java - 使用 java mongo db 驱动程序使用 MongoDB 插入时出现重复键错误