帮我优化一下 List<AppResInfoNodeDTO> appResInfoNodeDTOS = new ArrayList<>(); final List<AppResInfo> appResInfoList = appResInfoService.list(Wrappers.lambdaQuery(AppResInfo.class) .eq(AppResInfo::getIsDel, IsDelEnum.NO.getCode()) .eq(AppResInfo::getAppId, appInfo.getId())); final Map<Long, AppResInfoNodeDTO> collect = appResInfoNodeDTOS.stream().collect(Collectors.toMap(AppResInfoNodeDTO::getId, Function.identity())); final List<Long> deleteIdList = new ArrayList<>(); for (AppResInfo appResInfo : appResInfoList) { if (!collect.containsKey(appResInfo.getId())) { deleteIdList.add(appResInfo.getId()); } }
时间: 2024-02-14 08:28:02 浏览: 77
C# List用法详解
当优化这段代码时,可以考虑以下几点:
1. 使用 `addAll` 方法替代 `for` 循环添加元素到集合中,减少循环次数和方法调用次数。
2. 使用 `Set` 数据结构来替代 `List`,以便更高效地进行 `contains` 操作。
3. 使用流式操作来简化代码,并提高可读性。
优化后的代码如下所示:
```java
List<AppResInfoNodeDTO> appResInfoNodeDTOS = new ArrayList<>();
List<AppResInfo> appResInfoList = appResInfoService.list(Wrappers.lambdaQuery(AppResInfo.class)
.eq(AppResInfo::getIsDel, IsDelEnum.NO.getCode())
.eq(AppResInfo::getAppId, appInfo.getId()));
Set<Long> existingIds = appResInfoNodeDTOS.stream()
.map(AppResInfoNodeDTO::getId)
.collect(Collectors.toSet());
List<Long> deleteIdList = appResInfoList.stream()
.map(AppResInfo::getId)
.filter(id -> !existingIds.contains(id))
.collect(Collectors.toList());
```
在优化后的代码中,我们使用了流式操作来简化集合操作。首先,我们通过流式操作从 `appResInfoNodeDTOS` 中提取出已存在的 id 并放入一个 `Set` 中。然后,我们通过流式操作从 `appResInfoList` 中筛选出不在 `existingIds` 中的 id,并将其放入 `deleteIdList` 中。
这样做的好处是,使用了流式操作可以简化代码,使其更易读,同时还可以利用流的并行性来提高执行效率。
希望这样的优化对您有帮助!如果您有任何其他问题,请随时提问。
阅读全文