如何将映射<路径、列表<Path>>流式传输到<String>包含绝对路径作为字符串的列表?



我当前的项目需要一种将Map<Path, List<Path>>转换为包含绝对路径的List<String>的方法。Map包含按包含它们的目录分组的 Path 个文件。
但是,我必须将找到的文件的所有绝对路径写入转储文件,这就是为什么我需要 String s 而不是 Path s。
目前,我使用以下方法执行此操作,该方法对Map及其值使用嵌套forEach调用:

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更(现代的方式来做到这一点,通过流式传输keySetMapvalues
我遇到的问题是我不知道如何在流中应用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());

相关内容

  • 没有找到相关文章

最新更新