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 :)
Booleanobjetos cuando solo necesite unbooleanvalor. Aunque aquí, la variableincludees completamente obsoleta. Cuando el único cambio posible es detrueafalse, 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 comodirectoryRecordnunca cambia en el bucle, puede moverInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());antes del bucle (y cambiarIntegeraint).