优化以下代码: //获取所有的类目ids List<Long> goodsCategoryIds = new ArrayList<>(); //获取所有的商品ids List<Long> goodsId = new ArrayList<>(); if (!CollectionUtils.isEmpty(buyReturnActivity.getGoodsIds())) { goodsId.addAll(buyReturnActivity.getGoodsIds()); } if (!CollectionUtils.isEmpty(buyReturnActivity.getGoodsCategoryIds())) { goodsCategoryIds.addAll(buyReturnActivity.getGoodsCategoryIds()); } //获取类目的所有ids Set<Long> goodsCategoryId = new HashSet<>(); if (!CollectionUtils.isEmpty(goodsCategoryIds)) { log.info("获取到的多买多返的类目Ids为============" + goodsCategoryIds); Map<Long, CategoryCache> categoryMap2 = this.categoryService.categoryMap(tenantId, goodsCategoryIds); log.info("获取到的类目缓存mapwei ======= " + categoryMap2); 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-18 17:05:16 浏览: 122
可以优化的地方如下:
1. 可以使用addAll方法替换forEach循环中的if-else条件判断,减少代码量。
2. 可以使用流式编程简化代码逻辑,提高可读性。
重构后的代码如下:
```
List<Long> goodsCategoryIds = new ArrayList<>();
List<Long> goodsId = new ArrayList<>();
goodsId.addAll(buyReturnActivity.getGoodsIds());
goodsCategoryIds.addAll(buyReturnActivity.getGoodsCategoryIds());
Set<Long> goodsCategoryId = goodsCategoryIds.stream()
.map(c -> this.categoryService.categoryMap(tenantId, Collections.singletonList(c)).get(c))
.filter(Objects::nonNull)
.map(CategoryCache::getIdPaths)
.flatMap(s -> Arrays.stream(s.split("-")))
.map(Long::parseLong)
.collect(Collectors.toSet());
```
相关问题
private List<Equipment> getEquipments() { List<Equipment> list = new ArrayList<Equipment>();优化
您好!针对您提供的代码片段,我可以给出以下的优化建议:
1. 可以使用 diamond operator,使代码更简洁:
```
private List<Equipment> getEquipments() {
List<Equipment> list = new ArrayList<>();
```
2. 对于该方法而言,可能会频繁调用,因此可以考虑将创建 list 的过程提取出来,使用类变量进行存储,避免重复创建,提高效率:
```
private List<Equipment> equipmentList = new ArrayList<>();
private List<Equipment> getEquipments() {
if (equipmentList.isEmpty()) {
// 首次调用时创建 list
equipmentList.add(new Equipment());
// 添加其他元素
}
return equipmentList;
}
```
以上是我对该方法的优化建议,希望对您有所帮助!
List<List<Integer>> nums=new ArrayList<>();
在Java中,`List<List<Integer>> nums = new ArrayList<>();` 这行代码创建了一个二维列表 `nums`,它是一个动态数组,底层是由 `ArrayList` 类实现的。这里的 `List<Integer>` 是一个泛型声明,表示每个元素都是一个整数列表。所以,`nums` 可以存储一系列包含整数的列表。
例如,你可以像下面这样添加元素:
```java
nums.add(new ArrayList<>(Arrays.asList(1, 2, 3))); // 添加一个包含1, 2, 3的列表
nums.add(Arrays.asList(4, 5)); // 添加另一个只包含两个元素的列表
```
要访问其中的元素,可以使用索引来操作单个列表,或者遍历整个二维列表:
```java
List<Integer> innerList = nums.get(0); // 获取第一个列表
for (List<Integer> list : nums) {
System.out.println(list); // 遍历所有列表并打印它们的内容
}
```
阅读全文