Мой текущий проект нуждается в методе, который преобразует Map<Path, List<Path>>
в List<String>
, содержащий абсолютные пути.Map
содержит Path
файлов, сгруппированных по каталогу, в котором они содержатся.
Однако мне нужно записать все абсолютные пути к файлам, найденным в дамп-файле, поэтому вместо этого мне нужно String
sиз Path
s.
В настоящее время я делаю это с помощью следующего метода, который использует вложенные 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;
}
Это работает, ноЯ просто хочу знать (и даже больше) современный способ сделать это путем потоковой передачи keySet
или values
из Map
.
У меня проблема в том, что я просто не знаю, какпримените file.toAbsolutePath().toString()
в потоке.Я просто могу собрать все Path
s как List<Path>
:
List<Path> filePaths = sqlFilesInDirectories.values().stream()
.flatMap(List::stream)
.map(Path::toAbsolutePath)
.collect(Collectors.toList());
Как я могу изменить это утверждение (или написать совершенно другое), которое дает мне желаемое List<String>
срезультат Path.toAbsolutePath().toString()
?