否,因为Lambda需要目标类型。您所能做的最好是将表达式转换为:
Item similarItem = ((Supplier<Item>) (() -> { for (Item i : POSSIBLE_ITEMS) { if (i.name.equals(this.name)) return i; } return null;})).get();您必须为特定的lambda使用正确的功能接口。如您所见,它非常笨拙,没有用。
更新
上面的代码是Javascript代码的直接翻译。但是,直接转换代码并不能总是获得最佳结果。
在Java中,您实际上会使用
流 来执行该代码正在执行的操作:
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);



