将这段代码直接转换成int类型 Object dayCompleteTaskMax = mapOptional.orElse(Collections.emptyMap()).getOrDefault("day_complete_task_max", 0);
时间: 2023-02-06 14:57:08 浏览: 65
代码的意思是:将 mapOptional 中的值转换为 int 类型,如果 mapOptional 为空,就使用空的 Map,然后使用 getOrDefault 方法从 Map 中获取 key 为 "day_complete_task_max" 的值,如果没有则返回默认值 0。
转换后的代码如下:
```
int dayCompleteTaskMax = (int) mapOptional.orElse(Collections.emptyMap()).getOrDefault("day_complete_task_max", 0);
```
注意:在使用 getOrDefault 方法时,默认值的类型必须与 Map 中的值的类型相同,因此这里默认值使用了 int 类型的 0。
相关问题
这段代码可以优化的更简洁吗? Object dayCompleteTaskMax = mapOptional.map(map -> map.get("day_complete_task_max")).orElse(0); int READING_TASK_LIMIT = Integer.parseInt(dayCompleteTaskMax.toString()); if(READING_TASK_LIMIT==0){ throw new BusinessRuntimeException(ErrorCodeConstant._3002552.getCode(), ErrorCodeConstant._3002552.getMessage()); }
这段代码可以优化的更简洁一些。
具体做法是:
1. 使用 mapOptional.orElseThrow() 方法来替代 mapOptional.map().orElse(),这样可以统一处理异常,并且代码更加简洁。
2. 使用 OptionalInt 类型来替代 Object 类型,这样可以省去转换为 int 类型的步骤,并且使用 OptionalInt 类型可以避免空指针异常。
3. 使用常量来替代魔法数字,这样可以提高代码的可读性。
修改后的代码可能长这样:
```
final int READING_TASK_LIMIT = mapOptional.orElseThrow(() -> new BusinessRuntimeException(ErrorCodeConstant._3002552.getCode(), ErrorCodeConstant._3002552.getMessage()))
.get("day_complete_task_max")
.map(dayCompleteTaskMax -> Integer.parseInt(dayCompleteTaskMax.toString()))
.orElseThrow(() -> new BusinessRuntimeException(ErrorCodeConstant._3002552.getCode(), ErrorCodeConstant._3002552.getMessage()));
```
但是,这段代码还有一些问题,需要进一步改进。
1. 使用 Optional 类型时,避免使用 get() 方法。
2. 使用 Optional 类型时,避免使用 toString() 方法。
3. 使用 Optional 类型时,避免使用 parseInt() 方法。
修改后的代码可能长这样:
```
final int READING_TASK_LIMIT = mapOptional.orElseThrow(() -> new BusinessRuntimeException(ErrorCodeConstant._3002552.getCode(), ErrorCodeConstant._3002552.getMessage()))
.get("day_complete_task_max")
.map(dayCompleteTaskMax -> (int) dayCompleteTaskMax)
.orElseThrow(() -> new BusinessRuntimeException(ErrorCodeConstant._3002552.getCode(), ErrorCodeConstant._3002552.get
这段代码该怎么优化 Optional<Map<String, Object>> stringObjectMapOpt = Optional.ofNullable(result.get(0)); Map<String, Object> stringObjectMap = stringObjectMapOpt.orElse(new HashMap<>()); ReadArticleRuleDTO articleRuleDTO = getReadArticleRuleDTO(); articleRuleDTO.setReadingArticleDuration(Long.parseLong((String) stringObjectMap.getOrDefault(READING_ARTICLE_DURATION.getValue(), "0"))); articleRuleDTO.setCompleteTaskMaxReadCount(Integer.parseInt((String) stringObjectMap.getOrDefault(READING_ARTICLE_COUNT_MAX.getValue(), "0"))); articleRuleDTO.setCompleteCountPlatformShared(Boolean.parseBoolean((String) stringObjectMap.getOrDefault(READING_ARTICLE_PLATFORM_SHARED.getValue(), "false")) ? CommonBusinessEnum.YesNoEnum.YES.getValue() : CommonBusinessEnum.YesNoEnum.NO.getValue()); articleRuleDTO.setRepeatRewards(Boolean.parseBoolean((String) stringObjectMap.getOrDefault(REPEAT_REWARDS.getValue(), "false")) ? CommonBusinessEnum.YesNoEnum.YES.getValue() : CommonBusinessEnum.YesNoEnum.NO.getValue()); articleRuleDTO.setCompleteTaskMaxCountOnDay(Integer.parseInt((String) stringObjectMap.getOrDefault(DAY_COMPLETE_TASK_MAX.getValue(), "0"))); Optional<Object> optionalAwardDetail = Optional.ofNullable(stringObjectMap.get("awardDetail")); articleRuleDTO.setAwardDetails(optionalAwardDetail.map(ad -> (List<AwardDetails>) ad).orElse(new ArrayList<>())); articleRuleDTO.setTaskCode(taskCode); detailDTO.setArticleRuleDTO(articleRuleDTO); detailDTO.setDataList(new ArrayList<>());
你可以考虑用下面的方法来优化这段代码:
1. 把多个 `Boolean.parseBoolean((String) stringObjectMap.getOrDefault(key, "false"))` 和 `Integer.parseInt((String) stringObjectMap.getOrDefault(key, "0"))` 的判断和转换放到一个函数里面,减少重复的代码。
2. 对于 `Optional<Object> optionalAwardDetail`,可以把它转换成一个函数,然后通过把参数类型指定为 `Optional<AwardDetails>` 来简化代码。
3. 你可以考虑将 `ReadArticleRuleDTO` 中的字段设置为静态 final 类型,这样就可以避免每次创建新的 `ReadArticleRuleDTO` 对象。
4. 你可以把 `stringObjectMap.getOrDefault(key, defaultValue)` 替换成 `stringObjectMap.get(key)`,如果为 `null` 就使用默认值。这样可以减少一些不必要的转换和判断。
5. 对于 `Map<String, Object> stringObjectMap`,如果你确定它一定不为 `null`,你可以使用 `Map.of()` 或 `Map.ofEntries()` 来创建,这样可以避免使用 `Optional`。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)