Sto cercando di filtrare una risorsa ed escludere alcuni elementi in base a un campo. Per escludere ho un set (che contiene un ID che deve essere escluso) e un elenco (contiene più intervalli di ID che devono essere esclusi). Ho scritto la logica di seguito e non sono soddisfatto della seconda logica di filtro. Esiste un modo migliore per farlo con Java 8? Devo fare lo stesso anche per includere le gamme.
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());
Grazie :)
Boolean
oggetti quando hai solo bisogno di unboolean
valore. Sebbene qui, la variabileinclude
sia completamente obsoleta. Quando l'unica modifica possibile è datrue
afalse
, è possibile sostituirlainclude = false;
conreturn false;
poiché il risultato finale è già stato determinato. Quindi,return include;
alla fine può essere sostituitoreturn true;
e la dichiarazione di variabile rimossa. E poichédirectoryRecord
non cambia mai nel loop, puoi spostareInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
il ciclo prima del loop (e passareInteger
aint
).