Я пытаюсь отфильтровать ресурс и исключить некоторые элементы на основе поля. Для исключения у меня есть набор (который содержит идентификатор, который должен быть исключен) и список (он содержит несколько диапазонов идентификаторов, которые необходимо исключить). Я написал приведенную ниже логику, и меня не устраивает 2-я логика фильтра. Есть ли лучший способ сделать это с помощью Java 8? Мне нужно сделать то же самое для включения диапазонов.
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());
Спасибо :)
Boolean
объекты, когда вам просто нужноboolean
значение. Хотя здесь, переменнаяinclude
полностью устарела. Если единственное возможное изменение - отtrue
наfalse
, вы можете заменитьinclude = false;
на, такreturn false;
как конечный результат уже определен. Затемreturn include;
в конце можно заменитьreturn true;
и объявление переменной удалить. И посколькуdirectoryRecord
в цикле никогда не происходит изменений, вы можете переместитьInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
цикл перед циклом (и перейтиInteger
к немуint
).