Embora você certamente possa usar o formulário que sugeriu:
for (Document document : col.find()) {
// do something
}
ele apresenta um problema quando o corpo do loop for lança uma exceção:se isso acontecer, o cursor não será fechado. O idioma apropriado para se proteger disso é usar MongoCursor (que implementa Closeable) explicitamente:
try (MongoCursor<Document> cursor = col.find().iterator()) {
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
}
O método forEach é apenas um pouco de açúcar sintático para evitar a necessidade de o código do aplicativo se preocupar em fechar o cursor manualmente assim.
Se você não quiser criar um novo bloco para cada iteração, você pode refatorar seu código para extrair a criação de classe interna anônima, por exemplo:
Block<Document> block = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document);
}
};
col.find().forEach(block);
É claro que isso é ainda mais complicado, então se você puder usar o Java 8, poderá substituir tudo por um lambda:
col.find().forEach((Block<Document>) document -> {
System.out.println(document);
});
ou neste caso simplesmente:
col.find().forEach((Block<Document>) System.out::println);
A metafábrica lambda garantirá que nenhum objeto desnecessário seja criado.