我当前的项目需要一种将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更(现代的方式来做到这一点,通过流式传输keySet
或Map
的values
。
我遇到的问题是我不知道如何在流中应用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());