list转map,key相同合并代码执行顺序

介绍,list中存多个对象,用stream转换成map时,存在相同的key,会进行合并,,这时合并处理顺序就需要了解。

准备数据:

public static void main(String[] args) {
        UserBaseInfoVO userBaseInfoVO1 = new UserBaseInfoVO();
        userBaseInfoVO1.setId(1L);
        userBaseInfoVO1.setName("张三");

        UserBaseInfoVO userBaseInfoVO2 = new UserBaseInfoVO();
        userBaseInfoVO2.setId(1L);
        userBaseInfoVO2.setName("张三");

        UserBaseInfoVO userBaseInfoVO3 = new UserBaseInfoVO();
        userBaseInfoVO3.setId(1L);
        userBaseInfoVO3.setName("张三");

        UserBaseInfoVO userBaseInfoVO4 = new UserBaseInfoVO();
        userBaseInfoVO4.setId(2L);
        userBaseInfoVO4.setName("张三");

        List<UserBaseInfoVO> list = new ArrayList();

        list.add(userBaseInfoVO1);
        list.add(userBaseInfoVO2);
        list.add(userBaseInfoVO3);
        list.add(userBaseInfoVO4);

        AtomicInteger i = new AtomicInteger();

        Map<Long, UserBaseInfoVO> map = list.stream().collect(Collectors.toMap(UserBaseInfoVO::getId, item->{
            System.out.println("单次进入---"+i);
            System.out.println("单次进入--参数-"+item.getId());
            i.getAndIncrement();
            item.setPhone("151");
            return item;
        }, (v1, v2) -> {
            System.out.println("合并进入---"+i);
            System.out.println("合并进入-参数--"+v1.getId()+"参数二----"+v2.getId());
            i.getAndIncrement();
            return v1;
        }));

        System.out.println(map);


    }

执行结果

单次进入---0
单次进入--参数-1
单次进入---1
单次进入--参数-1
合并进入---2
合并进入-参数--1参数二----1
单次进入---3
单次进入--参数-1
合并进入---4
合并进入-参数--1参数二----1
单次进入---5
单次进入--参数-2
{1=UserBaseInfoVO(id=1, phone=151, name=张三, gender=null, avatar=null, certificationState=null), 2=UserBaseInfoVO(id=2, phone=151, name=张三, gender=null, avatar=null, certificationState=null)}

总结

,从代码执行结果可以,看出,每次都会进入--单次进入的代码块,在保存完数据之后,会在处理合并进入的代码块,进行合并操作。

所以如果有特殊处理,需要了解执行顺序。防止第一次进入值改变,在合并时出错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值