MongoIterable.forEach与Iterable.forEach

时间:2016-01-07 21:09:32

标签: 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界面定义,例如:MongoIterable.forEach(Consumer<? super TResult> consumer)?更好 - 为什么forEach中有MongoIterable

1 个答案:

答案 0 :(得分:3)

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