由java8中的字符串与流分组合成的集合
问题描述:
如何使用表达式Stream
groupingBy
Java 8的操作完成此操作?由java8中的字符串与流分组合成的集合
我想打开含有Set<String> 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
答
基本上Map<String, Set<String>> textFileListBydate
,要组由文件名的第一部分,即子串从起始开始到"_"
的第一个索引。您可以使用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()));