【发布时间】:2020-10-23 13:52:37
【问题描述】:
我正在制作一个过滤器,允许我生成一个 Map,其值是文件列表,为此,我尝试使用 Streams。 我有以下文件列表示例:
- CLA_FileName
- CLA_FileName
- CLA_FileName
- CM_FileName
- CM_FileName
- CM_FileName
- SP_FileName
- SP_FileName
- CON_FileName
- CON_FileName
然后我需要获取该文件列表并将它们带到一个映射,该映射的键将一个类型的所有文件分组在一个列表中;
Map
"CLA_", List <File> 3 CLA Files
"CM_", List <File> 3 CM Files
"SP_", List <File> 2 SP Files
"CON_", List <File> 2 CON Files
我有以下代码,它只为我分组一种文件类型,CLA。请您告诉我如何在地图上过滤和加载这些文件?
List<File> csvList = getFiles();
Function<File, String> filterCLA = new Function<File, String>() {
@Override
public String apply(File file) {
return String.valueOf(file.getName().startsWith("CLA_"));
}
};
Map<String, List<File>> map = csvList.stream()
.collect(groupingBy(f-> filterCLA.apply(f), toCollection(ArrayList::new)));
for(Map.Entry<String, List<File>> entry: map.entrySet()){
System.out.println(entry.getKey()+" - "+ entry.getValue());
}
此代码仅使用CLA_ 键将 CLA 文件保存在地图内的列表中。这是正确的,但我需要添加其余文件。
【问题讨论】:
标签: java java-8 functional-programming java-stream