Lambda表达式之【Collectors.toMap()】

文章介绍了Java中使用Lambda表达式结合Collectors.toMap方法将对象列表转换为Map,详细解释了toMap的作用和使用方式,并通过示例展示了如何处理键冲突。同时,文中还提到了groupingBy方法用于根据多个属性分组以及如何在两个列表间进行去重操作。
摘要由CSDN通过智能技术生成

Lambda的表达式之Collectors.toMap()

Hello!~ 小伙伴们

最近的自己博客写的可以说是很少了,也没有进行自我提升学习,总是在堕落中.在写此篇时(2023年6月10日14:54:05),我也正在加班

还有,也就是今天:我的好朋友也结婚了!~ 哈哈===>回归正题,今天我们的博客

1.Collectors.toMap()作用

和它的名字差不多,就是将一个对象的list数据集合转换成map的键值对

专业解释:

toMap(Function,Function): 返回一个集合Collector,将元素累积到一个Map中,将keyvalue提供的映射函数应用于输入元素的结果

2.实战操作

为了更深刻的掌握,我们再这用一个例子来进行说明,从而来快速掌握

2.1对象的数据准备

1.首先建一个person类的对象

/**
 *假设一个对象,与表的数据映射
 */
public class Person(){
    //id 主键
    int id;
    //姓名
    String name;
    //地址
    String address;
    
}

2.根据这个类拿取数据构建List==> 模拟数据的准备

List<Person> list=new ArrayList<>();
//模拟数据
for(int i=1;i<10;i++){
    list.add(new Person(i,"测试数据"+i,"地址"+));
}

2.2toMap使用

比如将list转成idkey的Map,valueid对应的’Person’对象

//toMap(key,value)

Map<Integer,Person> map=list.stream().collect(Collectors.toMap(Person::getId,Function.identity()));

注意:如果id存在重复值,那么在执行上述时,会报错==> 解决办法

只取前一个key及value:

Map<String, Person> map = list.stream()
    .collect(Collectors.toMap(Student::getId,Function.identity(),(oldValue,newValue) -> newValue))

3.补充: groupingBy()

啥意思呢?就是比如我要根据Personidname组合作为key,来进行筛选出一个Map集合,其中的valueidname的一一对应的list集合

Map<String, List<Student>> map = list.stream().collect(Collectors.groupingBy(dto->dto.getId()+dto.getName());

4.过滤去重 比如两个LIST进行去重

直接看当中的关键代码

containsKey: 判断是否含有相同的key

Map<String, Student> map2 = list2.stream()
    .collect(Collectors.toMap(Person::getId,Function.identity()));


List<String> strings = list1.stream()
    	.map(Person::getId)
    	.filter(map2::containsKey)
    	.map(map2::get)
    	.map(Person::getName)
    	.collect(Collectors.toList());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值