第一种: 将列表中的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));
resDevices.stream()
:将ListresDevices
转为一个Stream对象,使得我们可以使用Stream API进行处理。
collect(...)
:使用collect
方法对Stream中的元素进行收集。
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));