相关文章推荐
骑白马的包子  ·  java - Gson throws ...·  1 年前    · 
文武双全的铅笔  ·  Bootstrap ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

MongoIterable.forEach requires a Block which is very similar to Java 8 Consumer . They are similar enough to cause problems, for example, the following doesn't compile:

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

because the compiler can't decide between Iterable.forEach( Consumer ) and MongoIterable.forEach( Block ). Fixing this requires workarounds like explicitly typing the parameter:

Block<Document> printer = System.out::println;
result.forEach(printer);   

or alternatively, treating MongoIterable as a plain Stream:

StreamSupport.stream(result.spliterator(), false).forEach(System.out::println);

Why is MongoIterable.forEach not defined using the Consumer interface, something like: MongoIterable.forEach(Consumer<? super TResult> consumer)? Even better - why have forEach in MongoIterable at all?

This explains why Consumer is not used, but I am still not clear as to why have MongoIterable.forEach in the first place. Is it to give non Java 8 users a Java 8 like experience ? – David Soroko Jan 8, 2016 at 9:23 It was intended to make it more friendly. The jury's still out if that goal was achieved or not. – evanchooly Jan 10, 2016 at 21:52 It would have been nice to have a different name to avoid the name class, like forEachMongo (or maybe an even cooler name?). Luckily a simple type cast solves the issue. – Freek de Bruijn Nov 5, 2016 at 21:13

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.