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 :)
Boolean
objek saat Anda hanya perluboolean
nilai. Meskipun di sini, variabelnyainclude
sepenuhnya usang. Ketika satu-satunya perubahan yang mungkin adalah daritrue
kefalse
, 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 karenadirectoryRecord
tidak pernah berubah dalam loop, Anda dapat memindahkanInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
sebelum loop (dan mengubahInteger
keint
).