मेरे पास कोड का नीचे का टुकड़ा है।जावा 8 स्ट्रीम और लैम्बडास का उपयोग करते हुए पैरेंट तत्वों का जिक्र करते हुए लूप के लिए नेस्टेड को फिर से कैसे करें?
public static ModuleKey getDeployableModuleFromModulesList(List<Module> modules) {
ModuleKey deployableModuleKey = null;
for(Module module : modules) {
List<Artifact> artifacts = module.getArtifacts();
for(Artifact artifact : artifacts) {
if(artifact.getType().equals("ear")) {
return module.getKey();
} else if(!artifact.getType().equals("ear")) {
if(artifact.getType().equals("war")) {
deployableModuleKey = module.getKey();
}
}
}
}
return deployableModuleKey;
}
इस कोड कुंजी = 'कान' या कुंजी = 'युद्ध' के साथ पिछले एक के साथ पहली बार 'deployableModuleKey' पाता है। मैं जावा 8 स्ट्रीम और लैम्बडास का उपयोग कर उपर्युक्त कार्यक्षमता प्राप्त करना चाहता हूं।
अब तक मैं क्या करने की कोशिश की है:
modules.stream().flatMap(e -> e.getArtifacts().stream())
.filter(e -> e.getType().equals("ear")).findFirst()
.orElseGet(() -> modules.stream().flatMap(e -> e.getArtifacts().stream())
.filter(e -> e.getType().equals("war")).reduce((a, b) -> b).orElse(null));
ऊपर कोड स्निपेट प्रकार Artifact
बजाय Module
की एक वस्तु वापस आ जाएगी। मैं उस मॉड्यूल को प्राप्त करना चाहता हूं जहां आर्टिफैक्ट शर्तों से मेल खाता है। एक बार जब मैं मॉड्यूल पाता हूं तो मैं module.getKey()
कर कर कुंजी वापस कर सकता हूं। ऐसा करने के लिए मैं जानना चाहता हूं कि हम लूप के लिए माता-पिता के तत्वों को कैसे संदर्भित करते हैं।
मुझे यकीन नहीं है कि मेरा जावा 8 कोड पूरी तरह से सही है या नहीं।
क्या कोई इस संबंध में मेरी सहायता कर सकता है?
मैं आपको कुछ प्रक्रियाओं में इस प्रक्रिया को तोड़ने का सुझाव दूंगा। इसका मतलब यह नहीं है कि जावा 8 धाराओं को संचालन को बढ़ाने के लिए प्रोत्साहित नहीं किया जाता है, लेकिन जितना संभव हो सके उन्हें स्पष्ट और परमाणु बनाने के लिए। –
मुझे संदेह है कि स्ट्रीम का उपयोग आपके वास्तविक कोड से बेहतर है। इंटरमीडिएट ऑपरेशंस के बीच राज्य को पकड़ने के लिए स्ट्रीम अच्छे नहीं हैं। इसके अलावा, आपका वर्तमान कोड सभी कलाकृतियों के माध्यम से एक गुजरता है, जबकि प्रस्तावित समाधान दो पास करते हैं। यदि आप केवल एक पास के साथ ऐसा करना चाहते हैं, तो मेरा सुझाव है कि आप अपना खुद का कलेक्टर बनाएं (कलेक्टर बनाने के बारे में बहुत सारे प्रश्न हैं, बस एक चुनें और वहां से जारी रखें) –