优化下列代码articleRuleDTO.setAwardDetails((List<AwardDetails>) stringObjectMap.getOrDefault("articleRuleDTO", new ArrayList<>()));
时间: 2023-02-06 16:13:46 浏览: 79
这段代码的意思是将一个名为"articleRuleDTO"的键对应的值设置到articleRuleDTO对象的awardDetails属性上,如果键对应的值不存在或者不是一个List<AwardDetails>类型的对象,则将一个空的ArrayList设置到articleRuleDTO对象的awardDetails属性上。
getOrDefault方法是Map接口中的一个方法,它的作用是在查找给定键对应的值时,如果找不到则返回一个默认值。在这段代码中,默认值就是一个空的ArrayList。
需要注意的是,stringObjectMap变量应该是一个Map<String, Object>类型的变量,因为它的getOrDefault方法的参数是一个字符串类型的键,并且返回值是Object类型的。另外,awardDetails属性应该是一个List<AwardDetails>类型的属性,因为代码中将返回值强制转换为了List<AwardDetails>类型。
相关问题
优化下这段代码 articleRuleDTO.setAwardDetails((List<AwardDetails>) (awardDetail==null?new ArrayList<>():awardDetail));
### 回答1:
可以这样优化:
```
List<AwardDetails> awardDetails = awardDetail != null ? awardDetail : new ArrayList<>();
articleRuleDTO.setAwardDetails(awardDetails);
```
或者这样:
```
articleRuleDTO.setAwardDetails(awardDetail != null ? awardDetail : new ArrayList<>());
```
### 回答2:
articleRuleDTO.setAwardDetails(awardDetail==null ? new ArrayList<>() : (List<AwardDetails>)awardDetail);
### 回答3:
articleRuleDTO.setAwardDetails(awardDetail == null ? new ArrayList<>() : (List<AwardDetails>) awardDetail);
在优化这段代码时,可以将类型转换的操作移到 ternary operator 内部,这样就可以少写一些重复的代码。同时,也可以去除不必要的括号。
这段代码该怎么优化 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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)