मेरे सहयोगी और मेरे पास एक बग था जो हमारी धारणा के कारण था कि एक खाली स्ट्रीम कॉलिंग allMatch()वापस आ जाएगी false।
if (myItems.allMatch(i -> i.isValid()) {
//do something
}
निश्चित रूप से, यह दस्तावेज़ीकरण मानने और न पढ़ने के लिए हमारी गलती की तरह है। लेकिन जो मुझे समझ में नहीं आता है वह यह है कि allMatch()खाली स्ट्रीम के लिए डिफ़ॉल्ट व्यवहार क्यों होता है true। इसका क्या कारण था? जैसे anyMatch()(जो विपरीत रूप से गलत रिटर्न करता है), इस ऑपरेशन का उपयोग अत्यावश्यक तरीके से किया जाता है जो मोनाड को छोड़ देता है और शायद एक ifबयान में उपयोग किया जाता है। उन तथ्यों को ध्यान में रखते हुए, क्या कोई कारण है कि अधिकांश उपयोग के लिए खाली स्ट्रीम पर allMatch()डिफ़ॉल्ट trueहोना वांछनीय है?


allMatchरिटर्न सही है तो ऐसा होना चाहिएanyMatch। इसके अतिरिक्त, खाली मामले के लिए,allMatch(...) == noneMatch(...)जो अजीब भी है।