Saya mencoba memfilter sumber daya dan mengecualikan beberapa elemen berdasarkan bidang. Untuk mengecualikan saya memiliki satu set (yang berisi id yang perlu dikecualikan) dan daftar (itu berisi beberapa rentang id yang perlu dikecualikan). Saya menulis logika di bawah ini dan saya tidak puas dengan logika filter ke-2. Apakah ada cara yang lebih baik untuk melakukannya dengan Java 8? Saya perlu melakukan hal yang sama untuk memasukkan rentang juga.
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());
Terima kasih :)
Booleanobjek saat Anda hanya perlubooleannilai. Meskipun di sini, variabelnyaincludesepenuhnya usang. Ketika satu-satunya perubahan yang mungkin adalah daritruekefalse, Anda dapat menggantinyainclude = false;denganreturn false;karena hasil akhirnya telah ditentukan. Kemudian,return include;pada akhirnya dapat diganti denganreturn true;dan deklarasi variabel dihapus. Dan karenadirectoryRecordtidak pernah berubah dalam loop, Anda dapat memindahkanInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());sebelum loop (dan mengubahIntegerkeint).