Estoy tratando de filtrar un recurso y excluir algunos elementos basados en un campo. Para excluir, tengo un conjunto (que contiene una identificación que debe excluirse) y una lista (contiene múltiples rangos de identificadores que deben excluirse). Escribí la lógica a continuación y no estoy satisfecho con la lógica del segundo filtro. ¿Hay alguna manera mejor de hacerlo con Java 8? Necesito hacer lo mismo para incluir rangos también.
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());
Gracias :)
Boolean
objetos cuando solo necesite unboolean
valor. Aunque aquí, la variableinclude
es completamente obsoleta. Cuando el único cambio posible es detrue
afalse
, puede reemplazarinclude = false;
conreturn false;
ya que el resultado final ya se ha determinado. Entonces,return include;
al final puede ser reemplazado porreturn true;
y la declaración de variable eliminada. Y comodirectoryRecord
nunca cambia en el bucle, puede moverInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
antes del bucle (y cambiarInteger
aint
).