今天发现了Collectors.mapping
的正确姿势
使用场景如下:
我想要对一个List<User>
进行groupBy
class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
List<User> users = Arrays.asList(new User("ruben", 18), new User("vampire", 18));
Map<Integer, List<User>> ageUsersMap = users.stream().collect(Collectors.groupingBy(User::getAge));
实际上,我只需要此处User
的name
,我希望得到的是一个List<age,List<name>>
这样结构的数据
这时候,Collectors.mapping
就出现啦!
Map<Integer, List<String>> ageNamesMap = users.stream().collect(Collectors.groupingBy(User::getAge, Collectors.mapping(User::getName, Collectors.toList())));
这里使用了
Collectors.groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
第二个参数就是说你分组之后还想做一些后续处理,例如根据age
分组后再根据name
分组一次,或者我这里的,分组后,使用
Collectors.mapping(User::getName, Collectors.toList())
可以在分组后再获取其中属性,或者还可以进行别的计算如分组后再根据每一组内获取最大值等
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有