Set<String> imgRecordIds = imgRecordList.stream().map(ImageUploadRecord::getImageUploadRecordId).collect(Collectors.toSet());
时间: 2023-03-30 14:04:24 浏览: 56
这是一个关于 Java 语言中集合操作的问题,我可以回答。这段代码使用了 Java 8 中的 Stream API,将一个 ImageUploadRecord 对象列表中的每个对象的 imageUploadRecordId 属性提取出来,然后将其放入一个 Set 集合中。
相关问题
Set<String> collect = szbm.stream().map(Dispose::getColumnId).collect(Collectors.toSet());
这段代码使用了 Java 8 中的 Stream API,对一个名为 `szbm` 的集合进行操作。`map` 方法将集合中的每个元素都映射为 `Dispose::getColumnId`,即 `Dispose` 类中的 `getColumnId` 方法的引用。然后使用 `collect` 方法将映射结果收集到一个 `Set` 集合中,由于是 `Set` 集合,所以结果中不会有重复的元素。最终得到的 `collect` 集合就是 `szbm` 集合中所有元素的 `getColumnId` 方法的返回值去重后的结果。
List<String> landsForVillages = feignBasicController.getLandsForVillages(id); List<DevInfo> devByBaseId = feignHdController.getDevByBaseId(userInfo.getId(), classify); List<String> machineIds = devByBaseId.stream().map(DevInfo::getId).collect(Collectors.toList()); Set<String> machineIdList = new HashSet<>(); // json转化为list for (String machineId : machineIds) { List<String> landIdsList = baseMapper.getLandIdsById(machineId); for (String landIdStr : landIdsList) { if(StringUtils.isNotBlank(landIdStr)){ JSONArray arrayStr = JSON.parseArray(landIdStr); for (Object o : arrayStr) { if (landsForVillages.contains(o)) { // 村下面的工作设备 machineIdList.add(machineId); } } } } } 优化一下代码
可以尝试使用 Java 8 的 Stream API 重构代码,如下所示:
```
Set<String> machineIdList = devByBaseId.stream()
.map(DevInfo::getId)
.flatMap(machineId -> baseMapper.getLandIdsById(machineId).stream())
.filter(StringUtils::isNotBlank)
.flatMap(landIdStr -> JSON.parseArray(landIdStr).stream())
.distinct()
.filter(landsForVillages::contains)
.map(machineIdList::add)
.collect(Collectors.toSet());
```
这段代码首先使用 `flatMap` 将 `devByBaseId` 中的每个 `DevInfo` 转换为其对应的 `machineId`,然后对于每个 `machineId`,调用 `baseMapper.getLandIdsById` 获取其对应的 `landIdsList`,并将其转换为一个 `Stream<String>`。接着对于每个 `landIdStr`,使用 `JSON.parseArray` 将其转换为一个 `JSONArray`,然后将其中的每个元素转换为 `String`,并去重。最后,使用 `filter` 过滤出 `landsForVillages` 中包含的元素,并将其对应的 `machineId` 添加到 `machineIdList` 中,最终使用 `collect` 将其转换为一个 `Set<String>`。