2016-01-29 80 views
1

如何将List<File>映射为Map<String, List<String>>而不使用Java 8创建任何其他类?如何将对象列表映射到使用java给定对象的值映射8

键应该是父文件名,列表应该包含所有子文件名。

这将返回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

这是否有助于http://stackoverflow.com/questions/23213891/how-to-map-values-in-a-map-in-java-8? – dzieciou

+0

什么是父文件?父目录? – Gavriel

回答

4

你需要一个mapping下游收集器添加到该File流元素映射到它的名称和收集这些名称为List组的操作。

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

非常感谢 – John