在 Java 代码中,我们经常需要使用 Map 来存储数据。在获取 Map 中的值时,getOrDefault 方法可以用来指定当 Key 不存在时的默认值。然而,getOrDefault 方法在 Key 存在但 Value 为 null 时也会返回默认值,这在某些情况下可能不是我们想要的结果。

为了解决这个问题,我们可以使用 computeIfAbsent 方法。computeIfAbsent 方法可以在 Key 不存在时,根据指定的函数生成一个新的 Value,并将其存储到 Map 中。

以下代码示例展示了如何使用 computeIfAbsent 方法替换 getOrDefault 方法:

Map<String, List<Push>> map = new HashMap<>();
pushMapper.getList(map);
return map.computeIfAbsent("result", k -> Collections.emptyList())
        .stream()
        .collect(Collectors.groupingBy(Push::getModule, LinkedHashMap::new, Collectors.toList()))
        .entrySet()
        .stream()
        .map(entry -> PushVO.builder()
                .module(entry.getKey())
                .messageList(PushConverter.INSTANCE.toPushDTO(entry.getValue()))
                .build())
        .collect(Collectors.toList());

在上面的代码中,我们使用了 computeIfAbsent 方法来检查 Key "result" 是否存在,如果不存在,则使用 Collections.emptyList() 创建一个新的空列表并将其存储到 Map 中。这样,即使 Key "result" 存在,但 Value 为 null 时,我们仍然可以获得一个空列表,而不是默认值。

此外,我们还使用了 LinkedHashMap 来保证结果输出的顺序。LinkedHashMap 是一个有序的 HashMap,它可以保证元素的插入顺序。

通过使用 computeIfAbsent 方法和 LinkedHashMap,我们可以优化代码,避免 getOrDefault 方法在 Key 存在但 Value 为 null 时返回默认值,同时还能保证结果输出的顺序。

Java 代码优化:使用 computeIfAbsent 替换 getOrDefault 提高效率

原文地址: https://www.cveoy.top/t/topic/mV8n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录