7

MongoIterable.forEach需要Block与 Java 8 非常相似的 a Consumer。它们相似到足以导致问题,例如,以下内容无法编译:

MongoIterable<Document> result = collection.find(...);
result.forEach(System.out::println); 

因为编译器无法在Iterable.forEach( Consumer ) and之间做出决定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呢?

4

1 回答 1

4

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

于 2016-01-07T22:24:35.443 回答