MongoIterable.forEach与Iterable.forEach

Dav*_*oko 7 mongodb-java mongo-java-driver

MongoIterable.forEach需要一个Block与Java 8非常相似的东西Consumer.它们足够相似会导致问题,例如,以下内容无法编译:

MongoIterable<Document> result = collection.find(...);
result.forEach(System.out::println); 
Run Code Online (Sandbox Code Playgroud)

因为编译器无法在Iterable.forEach( Consumer ) 和之间做出决定MongoIterable.forEach( Block ).修复此问题需要明确键入参数的解决方法:

Block<Document> printer = System.out::println;
result.forEach(printer);   
Run Code Online (Sandbox Code Playgroud)

或者,MongoIterable作为一个平原处理Stream:

StreamSupport.stream(result.spliterator(), false).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

为什么MongoIterable.forEach没有使用Consumer界面定义,例如:MongoIterable.forEach(Consumer<? super TResult> consumer)?更好 - 为什么要forEach进去MongoIterable呢?

eva*_*oly 4

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