例如,我可能想做这样的作业(在 JavaScript 中):
var x = (function () {
// do some searching/calculating
return 12345;
})();
在 Java 中,我如何使用 Lambda 做类似的事情?编译器不
就像这样:
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 使用正确的函数接口。正如您所看到的,它非常笨重而且没有用。
UPDATE
上面的代码是JavaScript代码的直接翻译。但是,直接转换代码并不总是能给出最佳结果。
在Java中你实际上会使用streams执行该代码正在执行的操作:
Item similarItem = POSSIBLE_ITEMS.stream()
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
上面的代码假设POSSIBLE_ITEMS
is a Collection
,可能是一个List
。如果它是一个数组,请使用它:
Item similarItem = Arrays.stream(POSSIBLE_ITEMS)
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)