Stringとして絶対パスを含む>リスト<Stringに地図<パス、リスト<パス>>ストリーミングする方法は?

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はそれ以上)の近代的な方法を知りたいkeySetvaluesのを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());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=203538&siteId=1