我正在尝试过滤资源并根据字段排除一些元素。要排除,我有一个集合(包含需要排除的 id)和一个列表(它包含需要排除的多个 id 范围)。我写了下面的逻辑,我对第二个过滤器逻辑不满意。我们有没有更好的方法可以用 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());
Run Code Online (Sandbox Code Playgroud)
谢谢 :)