Nein, weil lambdas einen Zieltyp benötigen. Das Beste, was Sie tun können, ist der folgende Ausdruck:
Item similarItem = ((Supplier<Item>) (() -> {
for (Item i : POSSIBLE_ITEMS) {
if (i.name.equals(this.name)) return i;
}
return null;
})).get();
Sie müssen die korrekte funktionale Schnittstelle für Ihr bestimmtes Lambda verwenden. Wie Sie sehen können, ist es sehr klobig und nicht nützlich.
UPDATE
Der obige Code ist eine direkte Übersetzung des JavaScript-Code. Die direkte Konvertierung von Code liefert jedoch nicht immer das beste Ergebnis.
In Java würden Sie tatsächlich streams verwenden zu tun, was der Code tut:
Item similarItem = POSSIBLE_ITEMS.stream()
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
Der obige Code wird davon ausgegangen, dass POSSIBLE_ITEMS
ist ein Collection
, wahrscheinlich ein List
. Wenn es ein Array ist, verwenden Sie stattdessen:
Item similarItem = Arrays.stream(POSSIBLE_ITEMS)
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
Warum möchten Sie das? Was macht dein Javascript-Code anders, weil es in einem IIFE ist? – Blorgbeard
Ich glaube nicht, dass es möglich ist, weil der Compiler wissen muss, welche funktionale Schnittstelle das Lambda genau implementiert. – nitish712
Wenn Sie Code möchten, der sofort ausgeführt wird, schreiben Sie Code ohne Lambda. –