আমি একটি উত্স ফিল্টার করার চেষ্টা করছি এবং একটি ক্ষেত্রের উপর ভিত্তি করে কিছু উপাদান বাদ দিতে চাই। বাদ দেওয়ার জন্য আমার একটি সেট রয়েছে (এতে একটি আইডি রয়েছে যা বাদ দিতে হবে) এবং একটি তালিকা রয়েছে (এটিতে একাধিক আইডির বাদ দেওয়া দরকার)। আমি নীচের যুক্তিটি লিখেছি এবং আমি ২ য় ফিল্টার যুক্তিতে সন্তুষ্ট নই। জাভা 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)।