java8常见的List转Map的方法


【前言】以下是我在项目中常用到stream api 方法,list转map,以及分组,去重,合并等

// 实体类
@Data
@AllArgsConstructor
public class User {
    // 用户id和姓名
    private Integer userId;
    private String userName;
    // 用户所在的部门id和部门名称
    private String deptId;
    private String deptName;
}

// 添加测试数据
public class ListTest {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User(1001, "小明", "001", "一年级"));
        list.add(new User(1002, "小王", "001", "一年级"));

        list.add(new User(2001, "小美", "002", "二年级"));
        list.add(new User(2002, "小王", "002", "二年级"));
		
		// TODO 单独列举在下面出来
    }
}        

1.根据部门分组,将同部门的人信息合并

Map<String, List<User>> userListMap = list.stream().collect(Collectors.groupingBy(p -> p.getDeptId()));
Map<String, List<User>> userListMap2 = list.stream().collect(Collectors.groupingBy(User::getDeptId)); 
//【根据多个字段分组】
Map<String, List<User>> collect = list.stream().collect(Collectors.groupingBy(p -> p.getUserId() + p.getUserName()));

2.根据部门分组,将同部分所有人名合并成集合

Map<String, List<String>> deptToUserNameMap = list.stream().collect(Collectors.
		groupingBy(User::getDeptName,Collectors.mapping(User::getUserName, Collectors.toList())));
        

3.根据 userId -> deptId/deptName 转成map集合

Map<Integer, String> userToDeptIdMap = list.stream().collect(Collectors.toMap(p -> p.getUserId(), p -> p.getDeptId()));
Map<Integer, String> userToDeptNameMap = list.stream().collect(Collectors.toMap(User::getUserId, User::getDeptName));

4.每个userId 对应一个用户信息

Map<Integer, User> userMap = list.stream().collect(Collectors.toMap(User::getUserId, p -> p));

5. 获取所有员工的姓名userName(dictinct 去重复)

List<String> userNameList = list.stream().map(User::getUserName).distinct().collect(Collectors.toList());
List<String> userNameList2 = list.stream().map(p -> p.getUserName()).distinct().collect(Collectors.toList());

6.根据userId和userName去重

List<User> users= list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
         new TreeSet<>(Comparator.comparing(p -> p.getUserId() + p.getUserName()))), ArrayList::new));
                

7.根据List集合转换为List集合

        // 从数据库中查询出的对象集合
        List<User> userList = new ArrayList<>();
        // 判端是否为空
        if (CollectionUtils.isNotEmpty(userList)) {
            List<UserVO> UserVOs = userList.stream().map(user -> {
                UserVO userVO = new UserVO();
                userVO.setName(user.getName());
                // ... 省略其余的字段
                return userVO ;
            }).collect(Collectors.toList());
        }

如果对你有帮助,请麻烦点赞收藏支持下,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值