2015-07-16 14 views
6

मैंने लूप के लिए घोंसला किया है जिसे मुझे घोषणात्मक कोड में कनवर्ट करने की आवश्यकता है।नेस्टेड लूप को जावा 8 स्ट्रीम में कनवर्ट करना

for (String variable : variables){ 
     boolean validAttribute = false; 
     if(variable.equals(SOME_CONSTANT)){ 
      validAttribute = true; 
     } 
     else { 
     for(String attrName: attrNames){ 
      if(variableName.equals(attrName)){ 
       validAttribute = true; 
       break; 
      } 
     } 
     } 
     if(!validAttribute){ 
      return false; 
     } 
} 

मैं इसे flatMap का उपयोग करने के तरीके में कुछ हासिल करने में सक्षम हूं। लेकिन पहले गैर-मिलान प्रविष्टि को तोड़ने के लिए पहले लूप उपयोग के रूप में कुशल प्रतीत नहीं होता है। क्या कोई और आसान तरीका है?

(इसके अलावा कोड नीचे मुश्किल समझने के लिए लगता है)

List<String> inValidVariables = attrNames.stream().flatMap(attrName -> variableNames.stream() 
          .filter(variableName -> !variableName.equals(attrName) && !variableName.equals(SOME_CONSTANT))) 
          .collect(Collectors.toList()); 
return inValidVariables.size() ==0; 

उत्तर

5

निजी तौर पर (अगर वहाँ किसी भी चर जो does not लगातार या किसी attrName से मेल है) मैं कि

variables.stream().allMatch((item) -> item.equals(SOME_CONSTANT) 
           || attrNames.contains(item)); 

मुझे लगता है कि धाराओं अपने कार्य को आसान बनाना चाहिए नहीं की तरह इस का समाधान होगा अधिक जटिल, यही कारण है कि मैंने इसे आंतरिक लूप के लिए उपयोग नहीं किया क्योंकि आप इसे दोबारा कर सकते हैं।

यहाँ link है ideone के लिए जहां आप दोनों विधियों

+0

संपादित किया है, मुझे आपका उत्तर और भी पसंद है (मैं जटिल होने के बारे में सोच रहा था) – griFlo

+0

और मैं उस लंबे समय तक धाराओं का उपयोग नहीं कर रहा हूं। लेकिन एक समानांतर धारा इसे (ज्यादा?) तेज नहीं करेगा? – griFlo

+0

@griFlo मुझे नहीं पता, मैंने कल java8 को देखना शुरू कर दिया :) – user902383

2

मुझे लगता है कि यह आपकी आवश्यकता से मेल खाना चाहिए: यदि प्रत्येक चर रहा है लगातार या में से एक के बराबर होती है

variables.stream().noneMatch(variable-> !variable.equals(CONSTANT)&&attrNames.stream().noneMatch(attrName -> variable.equals(attrName))); 

रिटर्न true attrNames।

बाकी

यह रिटर्न false

+0

आप नहीं कर सकते चला सकते हैं 'चर -> {वापसी सामान;} ->' चर के बजाय stuff' '? –

+0

@tobias_k हाँ आप कर सकते हैं। मैंने अपना जवाब – griFlo

संबंधित मुद्दे