Ich versuche, über Streams zu lernen und habe ein Problem festgestellt: Ich möchte den minimalen Wert einer Liste erhalten und ihn einer int-Variablen zuweisen. Dafür habe ich folgendes gemacht:
%Vor% Das funktioniert gut und ich bekomme 1
als Ergebnis.
Das Problem ist, dass die IDE die Warnung gibt, dass Optional.get
aufgerufen wird, bevor sie nach .isPresent
sucht.
Um das zu beheben, habe ich die etwas andere Methode ifPresent
verwendet und folgendes versucht:
Leider funktioniert das nicht, da ich die Warnung bekomme: Bad return type in Lambda, Integer cannot be converted to void.
Meine Frage ist schließlich: Wie kann ich den min-Wert der int smallest
-Variable mit der Prüfung von ifPresent?
Stream#min
return Optional
des Ergebnisses, da der Stream im Allgemeinen leer sein kann, so dass es keinen minimalen Wert geben kann.
Um Wert von Optional zu erhalten, müssen Sie einen Fallback-Wert haben
%Vor% Am einfachsten wäre es, orElse
Etwas länger wäre isPresent
Die Methode ifPresent
verwendet Consumer<? super T>
als Parameter. Einfach ausgedrückt sollte es eine Aktion ohne return
statement sein. Sie könnten den Wert drucken, wenn er vorhanden ist, wie
Aber was ist mit IDEA? Ich denke, Sie müssen einfach eine Option<Integer>
-Instanz speichern und dann nach isPresent
:
Natürlich gibt es bequemere Möglichkeiten mit orElse
:
oder mit dem ternären Operator:
%Vor%Tags und Links java java-8 lambda java-stream