qhx*_*sgk 4 java java-8 java-stream collectors
如何使用Stream groupingByJava 8 的表达式操作完成此操作?
我想打开一个Set<String> allTextFileList包含:
20150101_00b667339f32fcff37db6e89aea53065.txt
20150101_06d0e76e4782cff3ce455feecf72b80d.txt
20150301_11f706c03860068e7e736ff943525504.txt
20150301_33719f3b98081b32e9ffd3b932e1902d.txt
Run Code Online (Sandbox Code Playgroud)
到一个Map<String, Set<String>> textFileListBydate包含
20150101 ->
- 20150101_00b667339f32fcff37db6e89aea53065.txt
- 20150101_06d0e76e4782cff3ce455feecf72b80d.txt
20150301 ->
- 20150301_11f706c03860068e7e736ff943525504.txt
- 20150301_33719f3b98081b32e9ffd3b932e1902d.txt
Run Code Online (Sandbox Code Playgroud)
基本上,您想按文件名的第一部分进行分组,即从字符串的开头到第一个索引的子字符串"_"。
对于此任务,您可以使用Collectors.groupingBy(classifier, downstream)。
classifier是一个函数,用于确定如何对结果中的对象进行分类Map。在这种情况下,该函数将返回文件名的第一部分。downstream是Collector会减少具有相同分类器的所有值的。在这种情况下,我们需要使用收集到的收集器Set,即Collectors.toSet()。码:
Map<String, Set<String>> textFileListBydate =
allTextFileList.stream()
.collect(groupingBy(s -> s.substring(0, s.indexOf('_')), toSet()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |