当前位置: 首页 > 知识库问答 >
问题:

Map上的流筛选器和分组列表

萧德庸
2023-03-14

我正在制作一个过滤器,允许我生成一个映射,其值是文件列表,为此,我尝试使用流。我有以下文件列表示例:

    null
 "CLA_", List <File> 3 CLA Files
 "CM_",  List <File> 3 CM Files
 "SP_",  List <File> 2 SP Files
 "CON_", List <File> 2 CON Files
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文件保存在映射中的列表中。这是正确的,但我需要添加其余的文件。

共有1个答案

萧秋月
2023-03-14

试试这个。任何不以xxx_开头的文件名都将映射到unknownType类型的catch all键

List<File> csvList = List.of(
new File("CLA_FileName"),
new File("CLA_FileName"),
new File("CLA_FileName"),
new File("CM_FileName"),
new File("CM_FileName"),
new File("CM_FileName"),
new File("SP_FileName"),
new File("SP_FileName"),
new File("CON_FileName"),
new File("CON_FileName"),
new File("BadFileName1"),
new File("BadFileName2"));
        

// get the prefix (e.g. CM_)
Function<File, String> getPrefix  = f-> {
       String name = f.getName();
    // location of delimiter
    int index = name.indexOf('_');
    if (index < 0) {
      return "UNKNOWN_TYPE";
    }
    return name.substring(0,index+1);
};
    
// create the map
Map<String, List<File>> map = csvList.stream()
        .collect(Collectors.groupingBy(getPrefix));

//print the map
map.entrySet().forEach(System.out::println);

印刷品

UNKNOWN_TYPE - [BadFileName1, BadFileName2]
CON_ - [CON_FileName, CON_FileName]
SP_ - [SP_FileName, SP_FileName]
CM_ - [CM_FileName, CM_FileName, CM_FileName]
CLA_ - [CLA_FileName, CLA_FileName, CLA_FileName]
 类似资料:
  • 试图从结构中获取项目列表,避免大量的for循环和if,所以我想使用 例如,lets具有以下结构: 我要创建: null List TestitemsFiltered=House1.FamilyList.Stream().FlatMap(f->f.PersonList.Stream().FlatMap(p->p.ItemList.Stream().Filter(Item->Item.Name.Equ

  • 我需要过滤一个列表

  • 我创建了一个用户,他属于一个名为Security的组。在Camunda modeler中,我明确地将任务分配给了组设施。然而,在运行应用程序时,我可以看到属于组安全性的用户可以查看并声明分配给组设施的任务。 如何确保任务列表仅显示分配给特定用户组的任务?目标是用户可以查看另一个组的任务。

  • 对不起,我仍然是小新在这方面,只是万一有代码有人想看到我否定这里是整个代码要点嵌入 我花了2个星期建立这个应用程序,并已卡在这个过滤在过去的2天。我需要有这个应用程序MVP明天下午演示在一个就业活动为最近的毕业生,这是仅剩的2件事之一。 我没有足够的代表赏金,但任何帮助或建议都很感激

  • 问题内容: 我有一些文件: 如何按地区过滤/选择不同的文档? 在SQL中,我可以使用GROUP BY。我尝试了条件聚合,但返回的计数却不同。 感谢您的帮助!:-) 问题答案: 如果您的ElasticSearch版本为1.3或更高版本,则可以使用top_hits类型的子聚合,默认情况下,它将为您提供按查询分数排序的前三个匹配文档(此处为1,因为您使用match_all查询)。 您可以将参数设置为3以

  • 我想用Django的。具有相关子对象列表的filter()方法返回包含所有子记录的父对象集。见下面的例子。 用户是父对象,颜色是与用户直接相关的子对象 用户1有颜色 User2有颜色 User3有颜色 User4有颜色 “颜色”是由帖子设置的列表。例如, 当前,用户包含具有任何的用户集。对于上面的示例集,我目前正在使用上面的代码获取、、和。也就是说,它正在使用OR搜索。我只想返回具有所有指定颜色的