优化以下代码: Set<Long> goodsCategoryId = new HashSet<>(); if (!CollectionUtils.isEmpty(goodsCategoryIds)) { Map<Long, CategoryCache> categoryMap2 = this.categoryService.categoryMap(tenantId, goodsCategoryIds); goodsCategoryIds.forEach(c -> { if (Objects.isNull(categoryMap2.get(c))) { return; } else { CategoryCache categoryCache1 = categoryMap2.get(c); String[] split = categoryCache1.getIdPaths().split("-"); List<String> strings = Arrays.asList(split); Set<Long> categoryId = strings.stream().map(Long::parseLong).collect(Collectors.toSet()); goodsCategoryId.addAll(categoryId); } }); }
时间: 2024-01-11 11:02:35 浏览: 68
C# 集合 使用总结
可以优化的地方有:
1. 使用 lambda 表达式来简化代码。
2. 如果 goodsCategoryIds 不为空,则先获取 categoryMap2,避免重复获取。
3. 使用 containsKey 来判断 Map 中是否存在某个 key。
4. 将 split 和 Arrays.asList(split) 合并为一行代码。
5. 使用 flatMap 来将 List<Long> 转换为 Set<Long>。
6. 将 forEach 替换为 stream。
优化后的代码如下:
```
Set<Long> goodsCategoryId = new HashSet<>();
if (!CollectionUtils.isEmpty(goodsCategoryIds)) {
Map<Long, CategoryCache> categoryMap2 = this.categoryService.categoryMap(tenantId, goodsCategoryIds);
goodsCategoryIds.stream()
.filter(categoryMap2::containsKey)
.map(categoryMap2::get)
.map(CategoryCache::getIdPaths)
.map(idPaths -> Arrays.stream(idPaths.split("-")).map(Long::parseLong).collect(Collectors.toSet()))
.flatMap(Collection::stream)
.forEach(goodsCategoryId::add);
}
```
阅读全文