Bir kaynağı filtrelemek ve bir alana dayalı bazı öğeleri dışlamak çalışıyorum. Hariç tutmak için (hariç tutulması gereken bir kimlik içeren) bir kümem ve bir liste (hariç tutulması gereken kimlikleri birden çok aralık içerir). Aşağıdaki mantığı yazdım ve 2. filtre mantığından memnun değilim. Java 8 ile yapmanın daha iyi bir yolu var mı? Aralıkları dahil etmek için de aynısını yapmam gerekiyor.
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());
Teşekkürler :)
BooleanSadece birbooleandeğere ihtiyacınız olduğunda nesneleri kullanmayın . Burada olmasına rağmen, değişkenincludetamamen eski. Mümkün olan tek değişiklik - arasındatrueolduğundafalse, sonuç zaten belirlendiği içininclude = false;ile değiştirebilirsinizreturn false;. Daha sonra,return include;sondaki ile değiştirilebilirreturn true;ve değişken bildirimi kaldırılabilir. BeridirectoryRecorddöngüde hiç değişmez, hareket edebilirInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());döngü önce (ve değiştirmekIntegeriçinint).