Meskipun Anda pasti dapat menggunakan formulir yang Anda sarankan:
for (Document document : col.find()) {
// do something
}
itu menimbulkan masalah ketika badan for loop melempar pengecualian:jika ini terjadi, kursor tidak akan ditutup. Ungkapan yang tepat untuk mencegahnya adalah dengan menggunakan MongoCursor (yang mengimplementasikan Closeable) secara eksplisit:
try (MongoCursor<Document> cursor = col.find().iterator()) {
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
}
Metode forEach hanya sedikit gula sintaksis untuk menghindari perlunya kode aplikasi khawatir harus menutup kursor secara manual seperti ini.
Jika Anda tidak ingin membuat Blok baru untuk setiap iterasi, Anda dapat memfaktorkan ulang kode Anda dengan mengeluarkan pembuatan kelas dalam anonim, mis.:
Block<Document> block = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document);
}
};
col.find().forEach(block);
Tentu saja itu lebih rumit, jadi jika Anda bisa menggunakan Java 8, Anda bisa mengganti semuanya dengan lambda:
col.find().forEach((Block<Document>) document -> {
System.out.println(document);
});
atau dalam hal ini cukup:
col.find().forEach((Block<Document>) System.out::println);
Metafactory lambda akan memastikan bahwa tidak ada objek yang tidak perlu dibuat.