这段代码该怎么优化 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<>());
时间: 2023-02-07 11:46:05 浏览: 89
你可以考虑用下面的方法来优化这段代码:
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`。
相关问题
优化这段代码Map<String, Object> map1 = result.get(0);
可以对这段代码进行一些优化,使其更加简洁和可读性更高。下面是一个优化的建议:
1. 使用泛型参数来指定 `result` 的类型,这样可以避免在使用 `get()` 方法时进行类型转换。例如,如果 `result` 是一个 `List<Map<String, Object>>` 类型的集合,可以这样写:
```java
List<Map<String, Object>> result = ...;
Map<String, Object> map1 = result.get(0);
```
2. 如果你确定 `result` 集合不会为空,并且你只需要第一个元素,可以使用 `Optional` 类来避免可能的空指针异常。例如:
```java
List<Map<String, Object>> result = ...;
Optional<Map<String, Object>> optionalMap1 = result.stream().findFirst();
Map<String, Object> map1 = optionalMap1.orElse(Collections.emptyMap());
```
这样,如果 `result` 为空,`optionalMap1` 将是一个空的 `Optional` 对象,而不是抛出异常。然后使用 `orElse()` 方法来提供一个默认值,这里使用了一个空的 `Map`。
请注意,这只是一种优化的方式,具体要根据代码的上下文和需求来决定是否适用。