将下面代码进行优化,使用Stream流处理 for (PtmItemVo item : ptmItemVoList) { if ("dwgc".equals(item.getType())) { List<PtmItemVo> zdwgcList = findListByParentId(item.getId()); for (PtmItemVo zdwgcEntity : zdwgcList) { if ("zdwgc".equals(zdwgcEntity.getType())) { list.add(zdwgcEntity); } else if (!list.contains(item)) { list.add(item); } } } }
时间: 2024-02-10 10:13:06 浏览: 64
可以使用 Java 8 中的 Stream API 和 Lambda 表达式来进行优化,代码如下:
```
ptmItemVoList.stream()
.filter(item -> "dwgc".equals(item.getType()))
.flatMap(item -> findListByParentId(item.getId()).stream())
.filter(zdwgcEntity -> "zdwgc".equals(zdwgcEntity.getType()))
.distinct()
.forEach(list::add);
```
这里用到了 Stream 的 filter、flatMap、distinct 和 forEach 方法,分别用于过滤出符合条件的元素、将列表展开为单个元素、去重以及将结果加入到目标列表中。相比于原始的 for 循环,Stream API 的代码更加简洁易懂,也更具有可读性。
相关问题
将下面代码进行优化,使用Stream流处理 List<PtmItemVo> ptmItemVoList = baseMapper.selectVoList(wrapper); List<PtmItemVo> list = new ArrayList<>(); for (PtmItemVo item : ptmItemVoList) { if ("dwgc".equals(item.getType())) { List<PtmItemVo> zdwgcList = findListByParentId(item.getId()); for (PtmItemVo zdwgcEntity : zdwgcList) { if ("zdwgc".equals(zdwgcEntity.getType())) { list.add(zdwgcEntity); } else if (!list.contains(item)) { list.add(item); } } } }
可以使用Stream流处理来优化这段代码,如下所示:
```
List<PtmItemVo> list = baseMapper.selectVoList(wrapper)
.stream()
.filter(item -> "dwgc".equals(item.getType()))
.flatMap(item -> {
List<PtmItemVo> zdwgcList = findListByParentId(item.getId());
return zdwgcList.stream()
.filter(zdwgcEntity -> "zdwgc".equals(zdwgcEntity.getType()))
.findFirst()
.map(Stream::of)
.orElse(Stream.of(item));
})
.collect(Collectors.toList());
```
首先,将List转换为Stream流,然后使用filter方法过滤出type属性为"dwgc"的元素。接着,使用flatMap方法将每个元素转换为一个Stream流,其中找到type属性为"zdwgc"的元素并返回,否则返回原元素。最后,使用collect方法将Stream流转换为List集合。
阅读全文