Java 8 Streams "ifPresent"

8

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:

%Vor%

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?

zuweisen     
Stefan B 31.07.2016, 20:27
quelle

3 Antworten

6

Stream#min return Optional des Ergebnisses, da der Stream im Allgemeinen leer sein kann, so dass es keinen minimalen Wert geben kann.

%Vor%

Um Wert von Optional zu erhalten, müssen Sie einen Fallback-Wert haben

%Vor%

Am einfachsten wäre es, orElse

zu verwenden %Vor%

Etwas länger wäre isPresent

%Vor%     
Nazarii Bardiuk 31.07.2016, 20:35
quelle
7

So würde ich es machen:

%Vor%     
duffymo 31.07.2016 20:34
quelle
1

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

%Vor%

Aber was ist mit IDEA? Ich denke, Sie müssen einfach eine Option<Integer> -Instanz speichern und dann nach isPresent :

überprüfen %Vor%

Natürlich gibt es bequemere Möglichkeiten mit orElse :

%Vor%

oder mit dem ternären Operator:

%Vor%     
Andrew 31.07.2016 20:37
quelle

Tags und Links