This question already has answers here:
Self Executing Anonymous Functions via Lambdas
(2 个回答)
4年前关闭。
例如,我可能想做这样的分配(在 JavaScript 中):
在 Java 中,我如何用 Lambdas 做类似的事情?编译器不
像这样的事情:
您必须为特定的 lambda 使用正确的功能接口(interface)。如您所见,它非常笨重且无用。
更新
上面的代码是 JavaScript 代码的直接翻译。但是,直接转换代码并不总是能得到最好的结果。
在 Java 中,您实际上会使用 streams 来执行该代码正在执行的操作:
上面的代码假设
(2 个回答)
4年前关闭。
例如,我可能想做这样的分配(在 JavaScript 中):
var x = (function () {
// do some searching/calculating
return 12345;
})();
在 Java 中,我如何用 Lambdas 做类似的事情?编译器不
像这样的事情:
Item similarItem = () -> {
for (Item i : POSSIBLE_ITEMS) {
if (i.name.equals(this.name)) return i;
}
return null;
}();
最佳答案
不,因为 lambda 需要一个目标类型。您能做的最好的事情就是转换表达式:
Item similarItem = ((Supplier<Item>) (() -> {
for (Item i : POSSIBLE_ITEMS) {
if (i.name.equals(this.name)) return i;
}
return null;
})).get();
您必须为特定的 lambda 使用正确的功能接口(interface)。如您所见,它非常笨重且无用。
更新
上面的代码是 JavaScript 代码的直接翻译。但是,直接转换代码并不总是能得到最好的结果。
在 Java 中,您实际上会使用 streams 来执行该代码正在执行的操作:
Item similarItem = POSSIBLE_ITEMS.stream()
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
上面的代码假设
POSSIBLE_ITEMS
是一个 Collection
,可能是一个 List
。如果它是一个数组,请改用它:Item similarItem = Arrays.stream(POSSIBLE_ITEMS)
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
关于java - Java 是否有立即调用的匿名函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39092246/
10-10 06:42