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 :)
Boolean
Objekte, wenn Sie nur einenboolean
Wert benötigen . Hier ist die Variableinclude
jedoch völlig veraltet. Wenn die einzig mögliche Änderung von isttrue
zufalse
, 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 dadirectoryRecord
nie in der Schleife ändert, können Sie die BewegungInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
vor der Schleife (und ändernInteger
zuint
).