java stream api实现group by
1、测试对象
@Data
@Builder
public class UserBean {
private String userId;
private String userName;
private Integer age;
}
2、测试代码
@Test
public void testStreamGroupBy(){
List<UserBean> userBeans=Lists.newArrayList();
userBeans.add(UserBean.builder().userId("001").userName("张三").age(10).build());
userBeans.add(UserBean.builder().userId("002").userName("李四").age(10).build());
userBeans.add(UserBean.builder().userId("003").userName("王五").age(20).build());
userBeans.add(UserBean.builder().userId("004").userName("赵六").age(10).build());
Map<Integer, Set<String>> collect = userBeans.stream()
.collect(Collectors.groupingBy(UserBean::getAge, Collectors.mapping(UserBean::getUserName,
Collectors.toSet())));
System.out.println(JSON.toJSONString(collect));
}
3、测试结果
{20:["王五"],10:["李四","张三","赵六"]}
4、总结
两个关键的函数
- groupingBy 分组函数,第一个入参是结果的key,第二个入参是分组的value,默认是对象本身,也可以自定义
- Collectors.mapping 实现自定义的映射。达到自定义返回值的效果
正文到此结束