Map<String, Integer> iMap = new HashMap<>();
iMap.put("a", 1);
Integer a = iMap.getOrDefault("a", getNum());

private Integer getNum() {
    System.out.println("getNum Method has been invoked");
    return 123;
}

output: getNum Method has been invoked

IMAP有键a,为什么还要调用getNum?

推荐答案

方法getOrDefault()计算执行其逻辑的两个参数before.

如果您想提供一个可选的部分,该部分将被延迟判断,那么您需要Java-8方法,比如merge()computeIfAbsent().

Map<String, Integer> iMap = new HashMap<>();
iMap.put("a", 1);
Integer a = iMap.computeIfAbsent("a", key -> getNum());

由于键"a"存在于映射中,因此不会执行lambda表达式.

Java相关问答推荐

将具有多个未知字段的SON映射到Java POJO

gitlab ci不会运行我的脚本,因为它需要数据库连接'

Spring boot:Bean和动态扩展器

Javascript在边界中心调整ImageView大小

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

使用联接和分页的SpringBoot Spring数据JPA

查找剩余的枚举

具有阻塞方法的开源库是否应该为执行提供异步选项?

如何解释Java中for-each循环中对Iterable的强制转换方法引用?

Mac上的全屏截图在使用JavaFX时不能正常工作吗?

Spring Security不允许加载js

Jenv-相同的Java版本,但带有前缀

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

为什么有两种实现来检索数组类的组件类型?

在缺少字段时使用Jackson With Options生成Optional.Empty()

Java递归泛型是否可以被视为继承和重写的语法糖

java.lang.NoSuchMethodError:';org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream$Builder org.apache.poi-poi-ooxml-5.2.4

读取ConcurrentHashMap中的可变对象

以较小的时间复杂度找到最大值的最小值