की सूची से पहले गैर खाली वैकल्पिक
मेरे पास एक वर्ग में कुछ विधियां हैं जो व्यावसायिक वस्तु को मान्य करती हैं। हर विधि लग रहा है
तरहOptional<Fail> validate1(BusinessObject bo)
जहां असफल एक enum है कि किसी तरह त्रुटि का वर्णन करता है, और कोई त्रुटि है, तो विधि Optional.empty रिटर्न()। मुझे सभी त्रुटियों को इकट्ठा करने की आवश्यकता नहीं है, लेकिन निम्नलिखित मान्यताओं को निष्पादित किए बिना पहली त्रुटि लौटाएं।
क्या मैं कर रहा हूँ
//first convert methods to suppliers
Supplier<Optional<Fail>> validate1=() -> validate1(bo);
Supplier<Optional<Fail>> validate2=() -> validate2(bo);
Supplier<Optional<Fail>> validate3=() -> validate3(bo);
//then some stream magic
return Stream.of(validate1, validate2, validate3)
.map(Supplier::get)
.filter(f -> f.isPresent())
.findFirst()
.orElse(Optional.empty()); //without the orElse, no error would return
// Optional(Optional.empty())
// instead of Optional.empty()
यह काम करता है, यह काम, यह अनावश्यक तरीकों पर अमल नहीं करता है, यह सुपाठ्य है (यह अगर Optional.orElse getOrElse नाम थे अधिक स्पष्ट होगा, लेकिन है यह मेरी पहुंच से बाहर है)। जो मैं खोजना चाहता हूं वह यह है कि यदि मैं चाहता हूं कि यह करने का एक उचित तरीका है, तो इस कोड को 'अच्छी शैली' या 'मूर्खतापूर्ण जावा 8' माना जाएगा, या क्या मैं स्ट्रीम या वैकल्पिक का दुरुपयोग कर रहा हूं, या कुछ स्पष्ट याद कर रहा हूं।
पहले गैर-खाली वैकल्पिक या खाली विकल्प लौटने का विचार अगर वे सभी खाली दिखते हैं तो यह सोचने के लिए पर्याप्त सामान्य है कि ऐसा करने का आधिकारिक तरीका है, मेरे सिर के पीछे कुछ 'मोनाड्स' चिल्ला रहा है! , लेकिन हास्केल की मेरी अज्ञानता लगभग सही है, इसलिए मुझे नहीं पता।
काफी उचित कोड की तरह लग रहा अंदाज। –
यदि मैं आप थे तो मैं शायद आपूर्तिकर्ता का उपयोग करने के बजाय 'Stream.of (validate1 (bo), validate1 (bo), validate1 (bo)) करूँगा। – Jatin
@ जेटिन जो तुरंत सभी मान्य तरीकों को कॉल करेगा। ओपी केवल उन्हें आवश्यकतानुसार कॉल करना चाहता है। – Misha