Ich versuche, eine Ressource zu filtern und einige Elemente basierend auf einem Feld auszuschließen. Zum Ausschließen habe ich einen Satz (der eine ID enthält, die ausgeschlossen werden muss) und eine Liste (die mehrere Bereiche von IDs enthält, die ausgeschlossen werden müssen). Ich habe die folgende Logik geschrieben und bin mit der 2. Filterlogik nicht zufrieden. Gibt es eine bessere Möglichkeit, dies mit Java 8 zu tun? Ich muss das Gleiche tun, um auch Bereiche einzuschließen.
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());
Vielen Dank :)
BooleanObjekte, wenn Sie nur einenbooleanWert benötigen . Hier ist die Variableincludejedoch völlig veraltet. Wenn die einzig mögliche Änderung von isttruezufalse, können Sie ersetzeninclude = false;mitreturn false;als das Endergebnis bereits ermittelt wurde. Dann kann dasreturn include;am Ende durch ersetztreturn true;und die Variablendeklaration entfernt werden. Und dadirectoryRecordnie in der Schleife ändert, können Sie die BewegungInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());vor der Schleife (und ändernIntegerzuint).