ฉันกำลังพยายามกรองทรัพยากรและไม่รวมองค์ประกอบบางอย่างตามเขตข้อมูล หากต้องการยกเว้นฉันมีชุด (ที่มีรหัสที่ต้องยกเว้น) และรายการ (มีรหัสช่วงที่ต้องแยกออกหลายช่วง) ฉันเขียนตรรกะด้านล่างและฉันไม่พอใจกับตรรกะตัวกรองที่สอง มีวิธีที่ดีกว่าที่เราสามารถทำได้ด้วย Java 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
)