次のコードが与えられたら、それをどのように単一の機能行に簡略化できますか?スプリットストリームを機能的に処理する方法
// 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(",")));
}
});
これは私が物事の流れを持っている私はに実行する一般的なパターンであり、そして私は、私はその後、Aをストリーミングするために一つのことを行うことができ、フィルタ、オフに基づいて2つのストリームを作成し、このストリームをフィルタリングしますストリームBへのもう1つのことは反パターンですか、それとも何とかサポートされていますか?
'map'を使用してください。あるいは、本当に必要なら 'partition'を使います。 –
[ストリームを2つのストリームに分割できますか?](https://stackoverflow.com/questions/19940319/can-you-split-a-stream-into-two-streams) –
ストリームを2つ作成しています*はフィルタリングではなく、あなたの場合はパーティショニングによってグループ化します。実際にストリームを2つに分割することはできません.2つの部分で収集する必要があります。これは反パターンではなく、ここに示された答えはまさにその通りです – Eugene