Saturday, 15 September 2012

Java 8 Streams conversion from iterator -


निजी शून्य applyQueryConditions (सूची resultList, सूची finalList) {

  ListIterator & LT; NestedCustomerDO50 & gt; इटरेटर = resultList.listIterator (); के लिए (; iterator.hasNext ();) {NestedCustomerDO50 नीस्टेड = iterator.next (); {If (( "ST2" .equals (child.getAttrib18 ())) || ( "ST3" .equals: अगर ( 'एस' == nestedDo.getAttrib8 ()) {(nestedDo.getFirstChildList () NestedFirstChildDO50 बच्चे) के लिए (Child.getAttrib18 ())) || ("एसटी 4" .इमेंल्स (बाल.जेटएटीटीबी 18 ()) || (! "एसटी"। एमेंल्स (बच्चा। जीएटीटीबी 18 ()))) {if (null! = Child getGrandChildList ()) {के लिए (NestedGrandChildDO50 पोता: बच्चे .getGrandChildList ()) {if ((date.after (grandChild.getAttrib19 ()) & amp; & amp; तारीख इससे पहले (grandChild.getAttrib43 ()))) {finalList.add (nestedDo); }}}}}}}}  

मैं निम्नलिखित कोड को जावा 8 स्ट्रीम में कनवर्ट करना चाहता हूं। लेकिन मुझे मुश्किलें मिलीं NestedCustomerDO50 एक ऐसा वर्ग है जो NestedFirstChildDO50 द्वारा विरासत में मिला है जो NestedGrandChildDO50 द्वारा विरासत में मिला है। प्रत्येक कक्षा में बाल वर्ग की सूची होती है (i ने नेस्टेड ग्राहक डीओ 50 में नेस्टेड फर्श चाइल्डडऑन 50 की सूची होती है और नेस्टेडफ़्स्ट चाल्डडीओ 50 में नेस्टेड ग्रैंड चाइल्डडऑन 50 की सूची होती है)। प्रत्येक वर्ग में 50 विशेषताओं (attrib1-atrib50) शामिल हैं।

  सूची & lt; NestedGrandChildDO50 & gt; परीक्षण = resultList.stream () .filter (v1 - & gt; v1.getAttrib8 () == 'एस') .flatMap (मूल्य - & gt;। value.getFirstChildList () धारा ()) .filter (मूल्य - & gt; " ST2 ".equals (value.getAttrib18 ()) ||" ST3 ".equals (value.getAttrib18 ()) ||" ST4 ".equals (value.getAttrib18 ()) ||! (" अनुसूचित जनजाति ".equals (मूल्य .getAttrib18 ()))) .flatMap (मूल्य - & gt;। value.getGrandChildList () धारा ()) .filter (val2 - & gt; (date.after (val2.getAttrib19 ())) & amp; & amp; (तारीख। पहले (val2.getAttrib43 ())) .collect (कलेक्टरों। सूची ());  

यहां मुझे केवल ग्रैंड चाइल्ड की सूची मिलती है लेकिन मैं चाहता हूं कि माता-पिता की सूची शर्तों को संतुष्ट करे। क्या इसे करने का कोई तरीका है। कृपया कोड के साथ ऐसा करने का तरीका बताएं।

स्ट्रीम-एपीआई की फ़िल्टर-विधि का उपयोग करें नेस्टेडडॉ.एफ़फ़ास्ट चाइल्डलिस्ट ()। स्ट्रीम ()। फ़िल्टर (सी - & gt; {स्ट्रिंग एट्रि 18 = सी। गेट आट्राइब 18 (); ... // आपका तुलना}) .पूर्व (सी - & gt; {... / मिलान वाले बच्चों के साथ कुछ करें});

<पूर्व> resultList.stream () फ़िल्टर (नेस्टेड डू - & gt; नेस्टेड डू। गेट एटिब 8 () == 'एस')। फ़िल्टर (नेस्टेड डू - & gt; नेस्टेड डू.गेट फर्स्ट चाइल्ड लिस्ट ()। स्ट्रीम ()। किसी भी मैच (सी -> ("एसटी 2"। एमेंल्स (सी। एट एटीटीबी 18 ()) "एसटी 3" .एमेंल्स (सी.ए.ए.टी.टी.टी. 18 ()) | | "एसटी 4" .एमेंल्स (सी.ए.ए.टी.टी.टी. 18 ()) ||! "एसटी"। एमेंल्स (सी। एटएटीटीबी 18 ())) और amp; सी। ग्रैंड चाइल्डलिस्ट ()! = नल एंड सी। ग्रैड चाइल्डलिस्ट () .stream ()। किसी भी मैच (जीसी - & gt; {तारीख। बाद (gc.getAttrib19 ()) और amp; amp; और amp; date.before (gc.getAttrib43 ())}))))))। foreach (finalList.add (nestedDo));

चूंकि आपकी विधि अंतिम रूप से नेस्टेड गयी है कई बार, सूची में, मैंने इसे ठीक कर लिया है अब हर मिलान नेस्टेड डू केवल एक बार जोड़ा जाता है।


No comments:

Post a Comment