java
2021-12-09
2021-12-09
胜人者有力,自胜者强。——先秦《老子》
今天发现了Collectors.mapping
的正确姿势
使用场景如下:
我想要对一个List<User>
进行groupBy
1 | class User { |
实际上,我只需要此处User
的name
,我希望得到的是一个List<age,List<name>>
这样结构的数据
这时候,Collectors.mapping
就出现啦!
1 | Map<Integer, List<String>> ageNamesMap = users.stream().collect(Collectors.groupingBy(User::getAge, Collectors.mapping(User::getName, Collectors.toList()))); |
这里使用了
1 | Collectors.groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream) |
第二个参数就是说你分组之后还想做一些后续处理,例如根据age
分组后再根据name
分组一次,或者我这里的,分组后,使用
1 | Collectors.mapping(User::getName, Collectors.toList()) |
可以在分组后再获取其中属性,或者还可以进行别的计算如分组后再根据每一组内获取最大值等