我觉得Optional的第二个map太复杂了,有简化写法吗
时间: 2024-03-20 17:39:36 浏览: 24
是的,可以使用 `flatMap` 代替 `map` 和 `filter` 的组合,将代码简化为:
```java
public List<String> getReceiversCodes() {
List<String> result = new ArrayList<>();
if (CharSequenceUtil.isNotBlank(receiverCode)) {
result.add(receiverCode);
}
Optional.ofNullable(extension)
.map(WorkTaskExtensionVo::getAssistants)
.flatMap(its -> its.stream()
.map(WorkTaskExtensionAssistantsVo::getCode)
.filter(CharSequenceUtil::isNotBlank)
.collect(Collectors.collectingAndThen(Collectors.toList(), list -> list.isEmpty() ? null : list)))
.ifPresent(result::addAll);
return result;
}
```
使用 `flatMap` 可以将流的结果直接映射成 `Optional` 类型,然后使用 `ifPresent` 将其添加到结果集中。同时,为了避免出现空列表,可以使用 `Collectors.collectingAndThen` 将列表转换为 `Optional` 类型,当列表为空时返回 `null`。