使用Java中的Optional优化这段代码 List<TaskAward> taskAward = taskAwardService.selectTaskAwardByCode(primaryDatum.getTaskCode(), taskGroupCode); if (!CollectionUtils.isEmpty(taskAward)) { Integer awardType = taskAward.get(0).getAwardType(); List<AwardDetails> objects = taskAward.stream() .map(award -> { AwardDetails awardDetails = new AwardDetails(); awardDetails.setAwardName(award.getName()); awardDetails.setAwardInfo(award.getInfo()); awardDetails.setAwardType(awardType); return awardDetails; }) .collect(Collectors.toList()); if (type.equals(CommonBusinessEnum.TaskTypeEnum.YDWZ.getValue())) { valueMap.put("awardDetail", objects); } else { valueMap.put("awardType", awardType); valueMap.put("awardName", objects.stream().map(AwardDetails::getAwardName).collect(Collectors.joining(","))); valueMap.put("awardInfo", objects.stream().map(AwardDetails::getAwardInfo).collect(Collectors.joining(","))); } }
时间: 2023-02-07 08:05:33 浏览: 132
使用Java8中Optional机制的正确姿势
这段代码中,首先通过调用 `taskAwardService.selectTaskAwardByCode()` 方法获取到一个 `List<TaskAward>` 类型的任务奖励列表,然后判断这个列表是否为空。如果不为空,则获取第一个任务奖励的奖励类型,然后将所有任务奖励映射为 `AwardDetails` 类型的对象列表。最后,根据 `type` 的不同值,将奖励类型、奖励名称和奖励信息分别放入一个 `Map` 对象中。
使用 Java 中的 Optional 类可以优化这段代码,具体方法如下:
1. 将 `taskAward` 变量改为 `Optional<List<TaskAward>>` 类型,然后使用 `Optional.ofNullable()` 方法将 `taskAwardService.selectTaskAwardByCode()` 方法返回的结果包装成 Optional 对象,这样就可以避免对返回值进行空值判断了。
```
Optional<List<TaskAward>> taskAward = Optional.ofNullable(taskAwardService.selectTaskAwardByCode(primaryDatum.getTaskCode(), taskGroupCode));
```
2. 使用 `Optional.map()` 方法将 `taskAward` 中的任务奖励列表映射为 `AwardDetails` 类型的对象列表,并使用 `Optional.orElse()` 方法设置一个默认值,以避免在 `taskAward` 为空的情况下抛出异常。
```
List<AwardDetails> objects = taskAward.map(taskAwards -> taskAwards.stream()
.map(award -> {
AwardDetails awardDetails = new AwardDetails();
awardDetails.setAwardName(award.getName());
awardDetails.setAwardInfo(award.getInfo());
阅读全文