栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用新的computeIfAbsent函数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用新的computeIfAbsent函数?

假设您有以下代码:

import java.util.Map;import java.util.concurrent.ConcurrentHashMap;public class Test {    public static void main(String[] s) {        Map<String, Boolean> whoLetDogsOut = new ConcurrentHashMap<>();        whoLetDogsOut.computeIfAbsent("snoop", k -> f(k));        whoLetDogsOut.computeIfAbsent("snoop", k -> f(k));    }    static boolean f(String s) {        System.out.println("creating a value for ""+s+'"');        return s.isEmpty();    }}

然后,您将看到消息

creating a value for"snoop"
恰好一次,就像在第二次调用时
computeIfAbsent
已经存在该键的值一样。的
k
在λ表达式
k ->f(k)
仅仅是该地图将传递到您的拉姆达用于计算值的键一个placeolder(参数)。因此,在示例中,键被传递给函数调用。

或者,您可以编写:

whoLetDogsOut.computeIfAbsent("snoop", k ->k.isEmpty());
在没有辅助方法的情况下获得相同的结果(但是您将看不到调试输出)。甚至更简单,因为它是对现有方法的简单委托,因此您可以编写:
whoLetDogsOut.computeIfAbsent("snoop",String::isEmpty);
此委托不需要编写任何参数。

为了更接近问题中的示例,您可以将其编写为

whoLetDogsOut.computeIfAbsent("snoop", key ->tryToLetOut(key));
(命名参数
k
还是都没有关系
key
)。或将其编写为
whoLetDogsOut.computeIfAbsent("snoop",MyClass::tryToLetOut);
好像
tryToLetOut
static
whoLetDogsOut.computeIfAbsent("snoop",this::tryToLetOut);
如果
tryToLetOut
是实例方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449784.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号