Streams in Java und was bedeutet meine Konsolen-Ausgabe?

Wuast

Bekanntes Mitglied
Hallöchen,
ich steige gerade bei den Streams ein. Soweit habe ich den Sinn verstanden und auch grob, wie das funktioniert.
Jetzt habe ich folgendes Problem:

Ein Array mit 5 durch Eingaben generierten Zahlen soll nach Umwandlung in einen Stream die größte Zahl ermitteln und ausgeben, taucht die 0 auf, wird der Stream beendet. Warum bekomme ich bei dem Code

Java:
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.*;

public class DerArray {

    //hier käme die main:
 
    int [] ar = new int [5];

 
    public void arFuellen() {
     
        for (int i = 0; i < ar.length; i++) {
            ar[i] = new java.util.Scanner(System.in).nextInt();;
        }
    }
 
    public void arStream() {
 
    //Arrays.stream(ar).forEach(System.out::println);
     
    System.out.println(Arrays.stream(ar)
                        .takeWhile(x -> x != 0)
                        .max());
    }
 
}

in der Konsole

1 (Eingabe)
1 (Eingabe)
1 (Eingabe)
5 (Eingabe)
2 (Eingabe)

OptionalInt[5] (Ausgabe)

oder

1 (Eingabe)
2 (Eingabe)
0 (Eingabe)
3 (Eingabe)
4 (Eingabe)

OptionalInt[2] (Ausgabe)

die jeweiligen genannten Ausgaben und nicht einfach den Max-Wert oder gar nichts? Der Stream, der den gesamten Array ausgibt (im Bsp. auskommentiert) funktioniert ja so wie gewollt. Da ist die Ausgabe einfach 1 1 1 5 2.

Und dann noch die allgemeinere Frage zu Streams:
Gehören die im Alltag zum Standard-Werkzeug und finden die sich quasi überall oder sind die eher seltener anzutreffen? Auf den ersten Blick wirkt das Thema auf mich etwas abschreckend. Viel neues zu lernen und tut "nur" das, was ich anders auch machen kann - aber etwas mehr im "clean code" (oder?).
 

KonradN

Top Contributor
die jeweiligen genannten Ausgaben und nicht einfach den Max-Wert oder gar nichts?
Wenn Du Dir die Dokumentation von IntStream.max anschaust, dann siehst Du als Rückgabe ein OptionalInt. Da dort die Rückgabe ein OptionalInt ist, wird natürlich auch ein OptionalInt ausgegeben und nichts anderes.

Wie würdest Du denn sonst einen int Wert "oder gar nichts" ausgeben? int hat immer einen Wert und kann nicht "gar nichts" sein. Man könnte maximal überlegen, auf den Wrapper zurück zu greifen um dann null als "gar nichts" zurück zu geben. Dies birgt aber das Risiko einer NPE und ist daher eben eher unschön.

Gehören die im Alltag zum Standard-Werkzeug und finden die sich quasi überall oder sind die eher seltener anzutreffen? Auf den ersten Blick wirkt das Thema auf mich etwas abschreckend. Viel neues zu lernen und tut "nur" das, was ich anders auch machen kann - aber etwas mehr im "clean code" (oder?).
Also Streams sind ein Standard-Werkzeug, aber ich würde bei der Frage weder sagen, dass sie überall anzutreffen sind noch dass sie eher seltener zu finden wären. Streams sind ein sehr gutes Werkzeug um eine Menge an Daten zu verarbeiten und da spielen sie ihre Stärke aus. Ebenso gut sind dieser auch, wenn es um eine einfache, mögliche Parallelisierung geht.
Generell macht es natürlich nur das, was prinzipiell auch anders bereits gehen würde. Aber es erleichtert sehr vieles, wenn man in wenigen Zeilen Code Dinge schreiben kann, die sonst deutlich mehr Code benötigen. Das "etwas mehr im clean code" ist also aus meiner Sicht extrem wichtig - auch wenn es von der Formulierung her sehr schwach klingt. Aber dahinter stecken Dinge wie Arbeitszeit, Fehlerwahrscheinlichkeiten, Wartbarkeit, Lesbarkeit, .... Also sehr existenzielle Dinge.

Und man muss auch den ganzen Zusammenhang sehen: Das ist ja eine Entwicklung, die mit dem Part "funktionale Entwicklung" mit gekommen ist. Und da ist dies eben ein nicht unwichtiger Bestandteil.
 

KonradN

Top Contributor
Hallo @Wuast , du solltest solche Vorschläge wie den von @KonradN einfach ignorieren:
Also den Vorschlag, Dokumentation anzusehen, solltest Du evtl. einmal befolgen.

Und nein:
so wäre es richtig
ist natürlich falsch. Wenn man die Anforderung liest, dann findet man:
Ein Array mit 5 durch Eingaben generierten Zahlen soll nach Umwandlung in einen Stream die größte Zahl ermitteln und ausgeben, taucht die 0 auf, wird der Stream beendet.
Und das ist in keiner Weise etwas, das Dein Code macht.
 

Wuast

Bekanntes Mitglied
Wenn Du Dir die Dokumentation von IntStream.max anschaust, dann siehst Du als Rückgabe ein OptionalInt. Da dort die Rückgabe ein OptionalInt ist, wird natürlich auch ein OptionalInt ausgegeben und nichts anderes.
Und mit diesem OptionalInt kann ich weiterarbeiten wie mit jedem normalen Int auch?! Habe den Sinn nicht so ganz gerafft, also woher das kommt und vor allem auch warum man das so macht. Aber Dann das ist ja eigentlich auch egal. Das mit den Dokus muss ich mir wirklich mal angewöhnen 😅
Danke auch für die anderen Hinweise bzw. Infos aus dem Alltag.

Bzgl. deiner zweiten Antwort: Ich denke, da hat ps_one etwas geschrieben, was inzwischen gelöscht wurde?! Bezieht sich
Und das ist in keiner Weise etwas, das Dein Code macht.
das auf MEINEN Code oder auf die gelöschte Antwort?
 

KonradN

Top Contributor
Und mit diesem OptionalInt kann ich weiterarbeiten wie mit jedem normalen Int auch?! Habe den Sinn nicht so ganz gerafft, also woher das kommt und vor allem auch warum man das so macht. Aber Dann das ist ja eigentlich auch egal. Das mit den Dokus muss ich mir wirklich mal angewöhnen 😅
Danke auch für die anderen Hinweise bzw. Infos aus dem Alltag.
Nicht ganz. Ein OptionalInt ist kein int. Den Wert bekommst Du mit getAsInt(). Ob ein Wert vorhanden ist prüfst Du per isPresent.

Man kann aber auch mittels einer der orElse Methoden weiter machen. Bei orElse kannst Du den hinterlegten Wert oder den übergebenen default Wert bekommen. Oder Du rufst eine andere Methode auf (orElseGet) oder wenn kein Wert da ist, lässt Du eine Exception werfen (orElseThrow).

Es gibt also einige Methoden, mit denen man hier arbeiten kann.
Bzgl. deiner zweiten Antwort: Ich denke, da hat ps_one etwas geschrieben, was inzwischen gelöscht wurde?! Bezieht sich
das auf MEINEN Code oder auf die gelöschte Antwort?
Das bezog sich auf die andere Antwort, die gelöscht wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
J Java 8 Streams - Frage zu "reduce" Java Basics - Anfänger-Themen 6
I Java Streams Java Basics - Anfänger-Themen 6
M Streams Java Basics - Anfänger-Themen 34
M Streams filter Java Basics - Anfänger-Themen 15
M generate Methode für Streams Java Basics - Anfänger-Themen 6
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
I Streams Java Basics - Anfänger-Themen 12
N Frage zu Streams Java Basics - Anfänger-Themen 3
U Input/Output Unterschiede Streams Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
C Methoden Sortieren mit Streams: Auf- und absteigend Java Basics - Anfänger-Themen 2
O Streams und die flush Methode Java Basics - Anfänger-Themen 3
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
M Input/Output Streams Java Basics - Anfänger-Themen 5
T Klassen wie funktionieren Streams, warum bekomme ich int zurück? Java Basics - Anfänger-Themen 2
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
T Fehler mit Streams! Java Basics - Anfänger-Themen 2
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
R Streams for runaways Java Basics - Anfänger-Themen 5
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
D Input/Output streams und readLine() Java Basics - Anfänger-Themen 3
firefexx Input/Output close() bei mehreren Streams Java Basics - Anfänger-Themen 5
M Frage zu Streams Java Basics - Anfänger-Themen 9
C try finally - Streams schließen Java Basics - Anfänger-Themen 7
M Streams und Sockets Java Basics - Anfänger-Themen 3
M file löschen, streams evtl noch offen Java Basics - Anfänger-Themen 7
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
S Piped Streams / Threads Java Basics - Anfänger-Themen 6
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
P Streams mit Sockets Java Basics - Anfänger-Themen 7
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
M Probleme mit den Streams Java Basics - Anfänger-Themen 2
G streams schließen Java Basics - Anfänger-Themen 2
P Fragen zu STreams Java Basics - Anfänger-Themen 5
M Streams Java Basics - Anfänger-Themen 4
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
? Streams Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
G Rekursionsaufgabe mit Streams Java Basics - Anfänger-Themen 5
J Problem mit Streams Java Basics - Anfänger-Themen 15
L Streams und Reader/Writer Java Basics - Anfänger-Themen 8
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M Streams, read and write Java Basics - Anfänger-Themen 2
M Streams Java Basics - Anfänger-Themen 2
B Streams wollen scheinbar nicht schließen Java Basics - Anfänger-Themen 6
S Umwandlung eines Character-Streams in ein Image Java Basics - Anfänger-Themen 17
E Probleme mit Streams Java Basics - Anfänger-Themen 3
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
D Datenbanken in Java Java Basics - Anfänger-Themen 2
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
R Java Bücher hilfe Java Basics - Anfänger-Themen 9
frager2345 Java Beans -> PropertyChangeListener Java Basics - Anfänger-Themen 3
Scappy Java Lernpartner gesucht! Java Basics - Anfänger-Themen 40
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
frager2345 Optional Klasse Java Java Basics - Anfänger-Themen 2
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
B "Firmenhierarchie" in Java umsetzen? Java Basics - Anfänger-Themen 3
rosima26 Java SubSum bestimmen Java Basics - Anfänger-Themen 76
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
Temsky34 Wie bekomme ich dieses Java-Warning wieder weg? Java Basics - Anfänger-Themen 2
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
M Variable Felderanzahl Java Java Basics - Anfänger-Themen 10
frager2345 Java Klasse Buch verwalten Java Basics - Anfänger-Themen 0
frager2345 Java eigen Klasse zum verwalten von Büchern Java Basics - Anfänger-Themen 3
frager2345 Java Java Basics - Anfänger-Themen 14
frager2345 Gauß Summenformel in Java Java Basics - Anfänger-Themen 10
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
C Wie berechne ich SQRT in Java? Java Basics - Anfänger-Themen 2
Fragerjava Java Schnittstellen Java Basics - Anfänger-Themen 6
volcanos sun.audio has been removed from Java since JDK 9 Java Basics - Anfänger-Themen 2
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
B Dom Manipulationen mittels Java Java Basics - Anfänger-Themen 8
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben