deHaar:
私の現在のプロジェクトは、変換する方法を必要としているMap<Path, List<Path>>
にList<String>
、絶対パスを含みます。Map
含まれているPath
それらを含むディレクトリでグループ化されたファイルの秒。
しかし、私は私が必要とする理由だダンプ・ファイルの中に見つかったファイルのすべての絶対パスを記述する必要がString
代わりに秒をPath
秒。
現時点では、私は、ネストされた使用する次の方法でそれを行うforEach
上でのコールMap
とその値を:
public List<String> getAllAbsolutePaths(Map<Path, List<Path>> filesInPath) {
List<String> absolutePaths = new ArrayList<String>();
filesInPath.forEach((directory, files) -> {
files.forEach(file -> absolutePaths.add(file.toAbsolutePath().toString()));
});
return absolutePaths;
}
これは働いているが、私はちょうどストリーミングでそれを行うには(nはそれ以上)の近代的な方法を知りたいkeySet
かvalues
のをMap
。
私が持っている問題は、私はちょうど適用する方法がわからないということであるfile.toAbsolutePath().toString()
ストリームで。私はすべて収集することができていますPath
よう秒List<Path>
:
List<Path> filePaths = sqlFilesInDirectories.values().stream()
.flatMap(List::stream)
.map(Path::toAbsolutePath)
.collect(Collectors.toList());
どのように私は希望私に与えるこのステートメントを変更する(または完全に異なるものを書く)ことができList<String>
た結果とPath.toAbsolutePath().toString()
?
アンドロニカス:
あなたはほぼ完了している、あなただけ呼び出す必要がtoString
パスのリストを結果に:
List<String> strings = filePaths.stream()
.map(Object::toString)
.collect(Collectors.toList());
または直接あなたの流れの中:
List<String> filePaths = sqlFilesInDirectories.values().stream()
.flatMap(List::stream)
.map(Path::toAbsolutePath)
.map(Object::toString)
.collect(Collectors.toList());