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

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 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 map=list.stream().collect(Collectors.toMap(Person::getId,Function.identity()));

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

只取前一个key及value:

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

3.补充: groupingBy()

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

Map> map = list.stream().collect(Collectors.groupingBy(dto->dto.getId()+dto.getName());

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

直接看当中的关键代码

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

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


List strings = list1.stream()
    	.map(Person::getId)
    	.filter(map2::containsKey)
    	.map(map2::get)
    	.map(Person::getName)
    	.collect(Collectors.toList());

你可能感兴趣的:(java,数学建模,开发语言)