다음 코드가 주어지면 어떻게 단일 기능 라인으로 단순화 할 수 있습니까?기능적으로 분할 스트림을 처리하는 방법
// DELETE CSV TEMP FILES
final Map<Boolean, List<File>> deleteResults = Stream.of(tmpDir.listFiles())
.filter(tempFile -> tempFile.getName().endsWith(".csv"))
.collect(Collectors.partitioningBy(File::delete));
// LOG SUCCESSES AND FAILURES
deleteResults.entrySet().forEach(entry -> {
if (entry.getKey() && !entry.getValue().isEmpty()) {
LOGGER.debug("deleted temporary files, {}",
entry.getValue().stream().map(File::getAbsolutePath).collect(Collectors.joining(",")));
} else if (!entry.getValue().isEmpty()) {
LOGGER.debug("failed to delete temporary files, {}",
entry.getValue().stream().map(File::getAbsolutePath).collect(Collectors.joining(",")));
}
});
이 나는 일의 흐름이 나에 운영하는 일반적인 패턴이며, 나는 다음 스트림 한 일을 할 수있는 필터를 기반으로 두 개의 스트림을 생성,이 스트림을 필터링 할 그리고 스트림 B에 또 다른 것은 안티 패턴인가, 아니면 어떻게 든 지원 되는가?
.collect(Collectors.partitioningBy(File::delete))
.forEach((del, files) -> {
if (del) {
LOGGER.debug(... files.stream()...);
} else {
LOGGER.debug(... files.stream()...);
});
'map'을 사용하십시오. 또는 정말로 원하면'partition'을 사용하십시오. –
[스트림을 두 스트림으로 분할 할 수 있습니까?] (https://stackoverflow.com/questions/19940319/can-you-split-a-stream-into-two-streams) –
두 개의 스트림을 만듭니다. * 필터링하지 않고 분할하여 귀하의 경우 분할하여; 두 개의 스트림을 실제로 분리 할 수는 없습니다. 두 부분으로 수집해야합니다. 이것은 안티 패턴이 아니며 여기에 표시된 답변은 정확히 – Eugene