Das Problem, das Sie haben, ist, dass die return
als die Rückkehr der Lambda-Funktion, nicht die Rückkehr der "Test" -Funktion genommen wird.
Optional.ifPresent
erwartet keine Funktion, die einen Wert zurückgibt. Es erwartet eine Consumer<T>
, die effektiv eine Funktion ist, die genau einen Parameter nimmt und nichts zurückgibt. Als normale Funktion, sondern als ein Lambda es in etwa so aussehen würde:
void myConsumer(String s)
{
System.out.println(s);
}
wollen Sie wahrscheinlich isPresent
verwenden ('ist 'nicht' wenn'):
if (myOptional.isPresent())
{
return "1";
}
else
{
return "0";
}
oder unter Verwendung eines ternären Operator:
return myOptional.isPresent() ? "1" : "0";
Nebenbei verwenden Sie den Rohtyp Optional
. Dies wird zu einer Compiler-Warnung führen. Sie sollten erklären, welche Art der Optional
durch Verwendung von Generika halten:
Optional<String> myOptional = /*something*/;
Diese Sie Typ Compiler-Sicherheit geben, dass die Optional
nicht andere Werte als Strings halten.
würde der idiomatische Weg
Optional
API richtig levarage sein Sie können eine 'Funktion' zurückgeben. Passt das zu Ihrem Bedarf? Sie würden 'test() aufrufen. Apply()' –Nun, Sie haben den Code geschrieben, funktioniert es? Stell es einfach in eine Klasse und lass es laufen. – Nathan
Mögliches Duplikat von [Return Lambda aus Methode in Java 8?] (Https://stackoverflow.com/questions/26771953/return-lambda-from-method-in-java-8) – litelite