मैं एक संसाधन को फ़िल्टर करने और एक क्षेत्र के आधार पर कुछ तत्वों को बाहर करने की कोशिश कर रहा हूं। बाहर करने के लिए मेरे पास एक सेट है (जिसमें एक आईडी है जिसे बाहर रखा जाना चाहिए) और एक सूची (इसमें कई प्रकार के आईडी शामिल हैं जिन्हें बाहर करने की आवश्यकता है)। मैंने नीचे दिया गया तर्क लिखा है और मैं द्वितीय फ़िल्टर तर्क से संतुष्ट नहीं हूँ। क्या कोई बेहतर तरीका है जिसे हम जावा 8 के साथ कर सकते हैं? मुझे रेंज के साथ-साथ इसके लिए भी ऐसा करने की जरूरत है।
Set<String> extensionsToExclude = new HashSet<>(Arrays.asList("20","25","60","900"));
List<String> rangesToExclude = new ArrayList<>(Arrays.asList("1-10","20-25","50-70","1000-1000000"));
return directoryRecords.stream()
.filter((directoryRecord) -> !extensionsToExclude.contains(directoryRecord.getExtensionNumber()))
.filter((directoryRecord -> {
Boolean include = true;
for(String s : rangesToExclude) {
String [] rangeArray = s.split("-");
Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber());
if(extension <= Integer.parseInt(rangeArray[0]) && extension >= Integer.parseInt(rangeArray[1])) {
include = false;
}
}
return include;
}))
.collect(Collectors.toList());
धन्यवाद :)
Boolean
जब आपको सिर्फ एकboolean
मूल्य की आवश्यकता हो तो वस्तुओं का उपयोग न करें । हालांकि यहां, चरinclude
पूरी तरह से अप्रचलित है। जब तभी संभव परिवर्तन से हैtrue
करने के लिएfalse
, आप बदल सकते हैंinclude = false;
के साथreturn false;
अंतिम परिणाम के रूप में पहले से ही निर्धारित किया गया है। फिर,return include;
अंत में प्रतिस्थापित किया जा सकता हैreturn true;
और हटाया गया चर घोषणा। और चूंकिdirectoryRecord
लूप में कभी नहीं बदलता है, आप लूप सेInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
पहले स्थानांतरित कर सकते हैं (और बदलInteger
सकते हैंint
)।