जबकि आप निश्चित रूप से आपके द्वारा सुझाए गए फॉर्म का उपयोग कर सकते हैं:
for (Document document : col.find()) {
// do something
}
यह एक समस्या का परिचय देता है जब लूप के लिए शरीर एक अपवाद फेंकता है:यदि ऐसा होता है तो कर्सर बंद नहीं होगा। इससे बचाव के लिए उचित मुहावरा स्पष्ट रूप से MongoCursor (जो Closeable लागू करता है) का उपयोग करना है:
try (MongoCursor<Document> cursor = col.find().iterator()) {
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
}
इस तरह से कर्सर को मैन्युअल रूप से बंद करने के बारे में चिंता करने के लिए एप्लिकेशन कोड की आवश्यकता से बचने के लिए forEach विधि सिंटैक्टिक चीनी का एक छोटा सा हिस्सा है।
यदि आप प्रत्येक पुनरावृत्ति के लिए एक नया ब्लॉक नहीं बनाना चाहते हैं, तो आप अपने कोड को अनाम आंतरिक वर्ग निर्माण से बाहर निकाल सकते हैं, जैसे:
Block<Document> block = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document);
}
};
col.find().forEach(block);
बेशक यह और भी अधिक जटिल है, इसलिए यदि आप जावा 8 का उपयोग करने में सक्षम हैं, तो आप पूरी चीज़ को लैम्ब्डा से बदल सकते हैं:
col.find().forEach((Block<Document>) document -> {
System.out.println(document);
});
या इस मामले में बस:
col.find().forEach((Block<Document>) System.out::println);
लैम्ब्डा मेटाफैक्ट्री यह सुनिश्चित करेगी कि कोई अनावश्यक वस्तु न बनाई जाए।