Lambda表达式 、序列化 取出map或List中的数据 Map stream 序列化

本文介绍了如何使用Java 8的Lambda表达式和Stream API从Map和List中提取数据。展示了五种不同的方法,包括将Map对象的id作为新Map的key,将对象的id和对象本身作为新Map的value,以及通过方法引用从Map中根据键获取值。这些技巧简化了代码并提高了处理列表和映射的效率。
摘要由CSDN通过智能技术生成

第一种:  将列表中的map对象的id取出来放到列表里

 list.stream().map(map -> map.get("number")).collect(Collectors.toList());  

具体来说,list.stream().map(map -> map.get("number")) 中的Lambda表达式 (map -> map.get("number")) 作为参数传递给了map()方法,这个Lambda表达式实现了Function接口的apply()方法,用于将Map对象里的"value"提取出来。

在Java 8中,Lambda表达式可以作为函数式接口的实现传递给其他方法,这种方式称为函数式编程。Lambda表达式本身代表了函数式接口中抽象方法的具体实现。

以上代码中,map()方法是Stream接口中的一个中间操作,它接收一个Function类型的参数,并对流中的每个元素应用该函数,然后返回一个新的流。在这里,Lambda表达式 (map -> map.get("number")) 就是 Function 接口的实现。

Lambda表达式的引入使得代码更加简洁和灵活,它提供了一种便捷的方式来将方法作为参数传递给其他方法,使得代码更加模块化和可重用。

第二种: 将列表中的自定义实体类对象的id取出来放到列表里

List<ResDevice> resDevices = resDeviceService.remoteDeviceList(resDevice);
resDevices.stream().map(ResDevice::getId).collect(Collectors.toList());

 将列表中的对象的id取出来放到列表里

 

第三种:  将列表中的对象的id取出来作为新Map的key ,  id对应的对象作为新Map的

value

//主键设备映射Map
Map<Long, ResDevice> idDeviceMap = resDevices.stream().collect
(Collectors.toMap(ResDevice::getId, resDeviceCell -> resDeviceCell));
  1. resDevices.stream():将List resDevices 转为一个Stream对象,使得我们可以使用Stream API进行处理。

  2. collect(...):使用collect方法对Stream中的元素进行收集。

  3. Collectors.toMap(ResDevice::getId, resDeviceCell -> resDeviceCell):在collect方法中使用Collectors.toMap(...)来生成一个Map对象。toMap()方法接收两个参数,第一个参数是用于生成Map的键的函数,第二个参数是用于生成Map的值的函数。在这里,ResDevice::getId是一个方法引用,用于提取ResDevice对象的id作为键,resDeviceCell -> resDeviceCell是一个Lambda表达式,用于返回ResDevice对象本身作为值。resDeviceCell就是resDevices循环出来的每个对象

在整个过程中,通过使用Lambda表达式和Stream API,可以更优雅地对List进行处理,将List中的元素映射为Map的键和值,从而生成一个新的Map对象。

 

第四种:  将列表中的对象的id取出来作为新Map的key ,  id对应的对象作为新Map的

value

//根据主键列表查询设备能力列表
List<WkDeviceAbilInfo> abilInfoList = wkDeviceAbilInfoMapper.selectWkDeviceAbilInfoListInDeviceIdList(deviceIdList);
//将各个设备的能力信息封装到温控箱列表中
abilInfoList.forEach(wkDeviceAbilInfo -> 

idDeviceMap.get(wkDeviceAbilInfo.getDeviceId()).
getAbilInfoList().add(wkDeviceAbilInfo));
return idDeviceMap.keySet().stream().map(idDeviceMap::get).
collect(Collectors.toList());

使用keySet()方法获取了Map中所有键的集合

idDeviceMap::get 是方法引用的一种形式,用于表示对 idDeviceMap 的 get 方法的引用。

在代码中,idDeviceMap 是一个 Map 对象,而 get() 是 Map 接口中的一个方法,用来根据键获取对应的值。方法引用 idDeviceMap::get 表示对 idDeviceMap 对象中的 get 方法的引用。

map::get 表示引用一个名为 get 的方法,该方法的签名符合 Map 接口中的 get 方法,即接受一个参数作为键,返回对应的值。使用这个方法引用,可以在代码中直接调用 get 方法,而不需要显式地写出方法实现。

在给出的代码中,idDeviceMap.keySet().stream().map(idDeviceMap::get) 表示将 idDeviceMap 的键集合转为流,然后使用 map 操作将每个键映射为对应的值,即获取 idDeviceMap 中键对应的设备对象。

 

第五种 : 与三种一样不过对象是map

List<HashMap> utilizationList  = mapper.getDevice(Pfk);

 Map<String, HashMap> utilizationMap = utilizationList.stream().collect(Collectors.toMap(map -> (String) map.get("levle"), utilizationmap -> utilizationmap));

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值