리소스를 필터링하고 필드를 기반으로 일부 요소를 제외하려고합니다. 제외하려면 세트 (제외 해야하는 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());
감사 :)
Boolean
필요할 때 객체를 사용하지 마십시오boolean
. 여기서는 변수include
가 완전히 사용되지 않습니다. 유일하게 가능한 변화에서 인 경우true
에false
, 당신은 대체 할 수include = false;
와return false;
최종 결과가 이미 결정되어있다. 그런 다음return include;
끝에는를 대체return true;
하고 변수 선언을 제거 할 수 있습니다 .directoryRecord
루프에서 절대로 변경되지 않기 때문에 루프Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber());
이전을 이동 하고로 변경할Integer
수int
있습니다.