在java8中,使用流groupingby对字符串集合进行分组

在java8中,使用流groupingby对字符串集合进行分组,java,java-8,java-stream,collectors,Java,Java 8,Java Stream,Collectors,如何使用Java8的表达式Stream操作来完成此操作 我想打开包含以下内容的Set allTextFileList: 20150101_00b667339f32fcff37db6e89aea53065.txt 20150101_06d0e76e4782cff3ce455feecf72b80d.txt 20150301_11f706c03860068e7e736ff943525504.txt 20150301_33719f3b98081b32e9ffd3b932e1902d.txt 映射到包含

如何使用Java8的表达式
Stream
操作来完成此操作

我想打开包含以下内容的
Set allTextFileList

20150101_00b667339f32fcff37db6e89aea53065.txt
20150101_06d0e76e4782cff3ce455feecf72b80d.txt
20150301_11f706c03860068e7e736ff943525504.txt
20150301_33719f3b98081b32e9ffd3b932e1902d.txt
映射到包含

20150101 ->
 - 20150101_00b667339f32fcff37db6e89aea53065.txt
 - 20150101_06d0e76e4782cff3ce455feecf72b80d.txt

20150301 ->
 - 20150301_11f706c03860068e7e736ff943525504.txt
 - 20150301_33719f3b98081b32e9ffd3b932e1902d.txt

基本上,您希望按照文件名的第一部分进行分组,即从
“\uu”
的开始到第一个索引的子字符串

对于此任务,您可以使用

  • 分类器
    是一个函数,用于确定如何在生成的
    映射中对对象进行分类。在这种情况下,函数将返回文件名的第一部分
  • 下游
    是一个
    收集器
    ,它减少具有相同分类器的所有值。在这种情况下,我们需要使用收集到
    集合的收集器,即
代码:

Map textFileListBydate=
allTextFileList.stream()
.collect(分组依据(s->s.substring(0,s.indexOf(“”“)),toSet());
Map<String, Set<String>> textFileListBydate = 
            allTextFileList.stream()
                           .collect(groupingBy(s -> s.substring(0, s.indexOf('_')), toSet()));