如何使用Java 8的表达式Stream groupingBy来完成这个操作?
我想转一个Set< String> allTextFileList包含:
20150101_00b667339f32fcff37db6e89aea53065.txt
20150101_06d0e76e4782cff3ce455feecf72b80d.txt
20150301_11f706c03860068e7e736ff943525504.txt
20150301_33719f3b98081b32e9ffd3b932e1902d.txt
到地图< String,Set< String>> textFileListBydate包含
20150101 ->
- 20150101_00b667339f32fcff37db6e89aea53065.txt
- 20150101_06d0e76e4782cff3ce455feecf72b80d.txt
20150301 ->
- 20150301_11f706c03860068e7e736ff943525504.txt
- 20150301_33719f3b98081b32e9ffd3b932e1902d.txt
解决方法:
基本上,您希望按文件名的第一部分进行分组,即从开头到第一个索引“_”的子字符串.
> classifier是一个函数,用于确定如何在生成的Map中对对象进行分类.在这种情况下,该函数将返回文件名的第一部分.
> downstream是一个收集器,它可以减少具有相同分类器的所有值.在这种情况下,我们需要使用收集到Set的收集器,即Collectors.toSet().
码:
Map> textFileListBydate =
allTextFileList.stream()
.collect(groupingBy(s -> s.substring(0, s.indexOf('_')), toSet()));
标签:collectors,java,java-8,java-stream
来源: https://codeday.me/bug/20190829/1762180.html