原创

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 实现自定义的映射。达到自定义返回值的效果
正文到此结束
本文目录