JAVA8 lambda表达式中Collectors.toMap()方法List转Map

使用lambda表达式中Collectors.toMap()方法将一个list转化成一个Map:


1. List < Entity> 转 Map<Entity.getId,Entity>

例:

Map<Long, VipEntity> vipMap = vipList.stream().collect(Collectors.toMap(VipEntity::getUserId, v -> v, (v1, v2) -> v1));

说明:

.collect(Collectors.toMap(VipEntity::getUserId, v -> v, (v1, v2) -> v1))

  • 第一个参数: VipEntity::getUserId 表示选择 VipEntity 的 getUserId 作为map的key值

  • 第二个参数: v -> v 表示选择将原来list中的每一个VipEntity对象作为map的key对应的每一个value值

  • 第三个参数:(v1, v2) -> v1 这一行去掉的话,一般情况下也是可以正常执行的;但是,偶然情况下,vipList中
    VipEntity对象是有可能存在重复的,而我们是取VipEntity中的UserId作为Map的key值,众所周知,Map的key是不能相同的,所以此时两个相同的UserId都要作为map的key值,如果不做处理就会直接报异常;而我们**(v1, v2) -> v1**的意思呐就是:当map的key出现重复的时候,我们取第一个key和value作为基准,忽略相同的情况。


另外
1.你也可以这么写:(v1, v2) -> v2,很明显,这样的意思就是:当map的key出现重复的时候,我们取第2个key和value作为基准,忽略相同的情况;

2.map的key你当然也可以使用别的,上面的例子中VipEntity::getUserId是以UserId作为map的key值,你也可以选择VipEntity::getPhoneNum,以PhoneNum作为map的key值,等等。。。


2. 基础类型的转换:List < Long> 转 Map<Long,Long>

例:

        List<Long> list = new ArrayList<>();
        list.add(1L);
        list.add(2L);
        list.add(3L);
        list.add(4L);
        list.add(5L);
        Map<Long, Long> map = list.stream().collect(Collectors.toMap(Function.identity(), Function.identity()));
        for(Long i = 1L ; i <= 10L; i++){
            log.info("获取到的元素:{}", map.get(i));
        }

输出结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值