आप एक अप्रचलित प्रश्न पूछ रहे हैं। धाराएं स्रोत के सभी तत्वों को संसाधित करती हैं, इसलिए यदि कोई तत्व नहीं है, तो कोई कार्रवाई नहीं की जाएगी। इसलिए, आपको यह जांचने की आवश्यकता नहीं है कि सूची खाली है या नहीं।
list.stream().filter(Objects::nonNull)
.map(listElement -> listElement.getCandyType())
.forEach(candyType -> Assert.assertEquals(ValueType.CANDY, candyType));
या
Assert.assertTrue(list.stream().filter(Objects::nonNull)
.map(listElement -> listElement.getCandyType())
.allMatch(Predicate.isEqual(ValueType.CANDY));
allMatch
इस चेक के लिए आवश्यक नियमों का पालन करती:
फिर भी, आप अपने कोड को आसान बनाने में कर सकते हैं। यदि कोई तत्व नहीं है, तो कोई विरोधाभासी तत्व नहीं है, इसलिए सभी मैच से मेल खाते हैं। ध्यान दें कि listElement -> listElement.getCandyType()
को ClassName::getCandyType
फ़ॉर्म के विधि संदर्भ द्वारा प्रतिस्थापित किया जा सकता है; मैंने इसे यहां नहीं किया क्योंकि मुझे सही वर्ग का नाम नहीं पता है।
दोनों प्रकारों के बीच कोई प्रदर्शन अंतर नहीं है। पहले गैर-मिलान तत्व का सामना करते समय allMatch
तत्काल वापस आ जाएगा, और assertEquals
पहले गैर मिलान तत्व पर फेंक देगा। दूसरे मामले में, स्टैक ट्रेस स्ट्रीम एपीआई कार्यान्वयन की कलाकृतियों को नहीं दिखाएगा।
दूसरी बार प्राथमिकता दी जाती है जब आप यूनिट परीक्षणों के बजाय उत्पादन कोड के लिए चेक प्रदान करते हैं और जावा भाषा assert
सुविधा के साथ इन चेक को बंद करने की अनुमति देते हैं, उदा।
assert list.stream().filter(Objects::nonNull)
.map(listElement -> listElement.getCandyType())
.allMatch(Predicate.isEqual(ValueType.CANDY));
के रूप में इस फार्म की गारंटी देता है कि वहाँ कोई भूमि के ऊपर जब दावे बंद कर दिया जाता है, जबकि पहले संस्करण का, forEach
कार्रवाई के साथ एक assert
बयान होने हो जाएगा अभी भी सभी तत्वों से अधिक पुनरावृत्ति और के मध्यवर्ती कदम उठाने का कारण बन सकते पाइप लाइन।
आपके दृष्टिकोण का नुकसान यह है कि विफलता के मामले में मूल कोड "अपेक्षित कैंडी जैसा था लेकिन वास्तविक था: SHMANDY" जैसा वास्तविक गैर-मिलान मूल्य प्रदर्शित करेगा, जबकि आपका कोड केवल इतना कहता है कि दावा विफल हुआ। –
@ टागीर वैलेव: मेरा पहला संस्करण अभी भी ऐसा करता है। हालांकि यह बहस योग्य है कि क्या वह जानकारी वास्तव में मदद करती है। हो सकता है कि इंडेक्स अधिक सहायक हो, शायद * अन्य * गैर-मेलिंग आइटम, यदि कुछ हैं ... आमतौर पर, इतिहास जो गलत स्थिति को जन्म देता है वह है जो आपको चाहिए, लेकिन यह कुछ है, न तो संस्करण वितरित कर सकता है। – Holger
धन्यवाद। मैंने आपका उत्तर चुना। यह मेरे कोड पर भी बहुत स्पष्ट और सुधार हुआ था। –