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 :)
Boolean
Sadece birboolean
değere ihtiyacınız olduğunda nesneleri kullanmayın . Burada olmasına rağmen, değişkeninclude
tamamen eski. Mümkün olan tek değişiklik - arasındatrue
olduğ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. BeridirectoryRecord
döngüde hiç değişmez, hareket edebilirInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
döngü önce (ve değiştirmekInteger
içinint
).