如何在不使用Java 8创建任何其他类的情况下将List<File>
映射到Map<String, List<String>>
?
键应为父文件名,列表应包含所有子文件名。
这将返回Map<String, List<File>>
,因此无法编译。
Function<File, String> parentName = (f) -> f.getParent();
List<File> files = new ArrayList<>();
Map<String, List<String>> var = files
.stream()
.collect(Collectors.groupingBy(parentName));
答案 0 :(得分:4)
您需要通过将File
Stream元素映射到其名称并将这些名称收集到List
中的操作,向该组添加mapping
下游收集器。
Map<String, List<String>> var =
files.stream()
.collect(Collectors.groupingBy(
File::getParent,
Collectors.mapping(File::getName, Collectors.toList())
));