如何使用java 8将对象列表映射到给定对象的值映射

时间:2016-01-29 13:42:56

标签: java java-stream

如何在不使用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));

1 个答案:

答案 0 :(得分:4)

您需要通过将File Stream元素映射到其名称并将这些名称收集到List中的操作,向该组添加mapping下游收集器。

Map<String, List<String>> var = 
    files.stream()
         .collect(Collectors.groupingBy(
             File::getParent,
             Collectors.mapping(File::getName, Collectors.toList())
         ));