【发布时间】:2013-10-17 04:34:27
【问题描述】:
我非常想使用Map.computeIfAbsent,但是自从本科生使用 lambda 以来已经太久了。
几乎直接来自文档:它提供了一个旧方法的示例:
Map<String, Boolean> whoLetDogsOut = new ConcurrentHashMap<>();
String key = "snoop";
if (whoLetDogsOut.get(key) == null) {
Boolean isLetOut = tryToLetOut(key);
if (isLetOut != null)
map.putIfAbsent(key, isLetOut);
}
还有新方法:
map.computeIfAbsent(key, k -> new Value(f(k)));
但在他们的例子中,我认为我并没有完全“明白”。我将如何转换代码以使用新的 lambda 方式来表达这一点?
【问题讨论】:
-
我不确定您从那里的示例中不明白什么?
-
什么是“k”?它是一个被定义的变量吗? “新值”怎么样 - 是来自 java 8 的东西,还是代表我需要定义或覆盖的对象? whoLetDogsOut.computeIfAbsent(key, k -> new Boolean(tryToLetOut(k))) 无法编译,所以我遗漏了一些东西......
-
究竟什么不能编译?它会产生什么错误?
-
Temp.java:26: 错误:非法开始表达式 whoLetDogsOut.computeIfAbsent(key, k -> new Boolean(tryToLetOut(k))); (指向“>”)
-
对我来说编译得很好。确保您真正使用 Java 8 编译器。其他 Java 8 功能是否有效?
标签: java dictionary lambda java-8