studyklar
GdI 2 · Probeklausur Teil 2 · Aufgabe 10

Stream: Zahlen verdoppeln, zu Strings machen, die mit 1 beginnenden ausgeben

Fünf Zahlen laufen wie über ein Fließband durch mehrere Stationen: verdoppeln, in Text verwandeln, aussortieren, ausgeben. Genau das ist ein Stream in Java. Rechts stehen die Zeilen der Lösung und eine Tabelle mit dem Wert jeder Zahl an jeder Station. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 10

Die folgende Aufgabe soll mit Hilfe von Streams und Lambdas gelöst werden.

Gegeben ist die folgende Liste:

List<Integer> zahlen = List.of(17, 9, 55, 97, 33);

Es sollen nacheinander folgende Verarbeitungsschritte durchgeführt werden:

  • Einen Stream erstellen
  • Jede Zahl verdoppeln
  • Jede der verdoppelten Zahlen in einen String verwandeln. So würde aus der Zahl 12 der String "12". Hierfür können Sie die statische Methode Integer.toString(int i) verwenden.
  • Die Strings auswählen, die mit einer 1 beginnen. Ob ein String mit einem bestimmten Teilstring beginnt, kann mit Hilfe der Methode „startsWith(String teilstring)“ ermittelt werden.
  • Jede dieser Zahlen auf der Konsole ausgeben.

Geben Sie nur die benötigten Code-Zeilen an, keine umgebende Methode oder Klasse, und auch keine Importe.

Gesucht sind nur die Codezeilen, ohne Klasse, ohne Methode, ohne Importe. Sie sollen die fünf Verarbeitungsschritte der Aufgabe mit einem Stream und Lambdas umsetzen, in genau dieser Reihenfolge.

Merke: Ein Stream ist ein Fließband für die Elemente einer Liste. Jede Station ist eine Methode: map verwandelt jedes Element in ein neues, filter lässt nur die Elemente durch, für die eine Bedingung gilt, forEach macht am Ende mit jedem Element etwas. Was jede Station tut, sagt ein Lambda, eine kurze Funktion ohne Namen.
  1. Einen Stream aus der Liste erstellen.
  2. map: jede Zahl verdoppeln.
  3. map: jede Zahl in einen String verwandeln.
  4. filter: nur Strings, die mit „1“ beginnen.
  5. forEach: jeden String ausgeben.

Zu dieser Probeklausur gibt es keine Musterlösung. Die Lösung hier ist selbst erarbeitet und ausgeführt.

Einen Stream aus der Liste erstellen

zahlen.stream()

Die Liste zahlen ist gegeben (Zeile 1). zahlen.stream() macht daraus einen Stream: Die fünf Zahlen laufen in ihrer Reihenfolge, eine nach der anderen, durch die folgenden Stationen. Die Liste selbst ändert sich dabei nicht.

Jede Station hängt man mit einem Punkt an. Damit man das lesen kann, steht jede auf einer eigenen Zeile. Erst am Ende steht ein Semikolon.

Aus Blatt 9, Aufgabe 3 („Verkaufsstatistik mit einem Stream: filtern, in Euro umrechnen, ausgeben“): liste.stream() macht aus einer Liste einen Stream. Danach folgen Stationen wie filter und map, zum Schluss forEach.

map: jede Zahl verdoppeln

        .map(zahl -> zahl * 2)

map ersetzt jedes Element durch ein neues. Was das neue ist, sagt das Lambda zahl -> zahl * 2: Links vom Pfeil steht der Parameter, hier die aktuelle Zahl. Rechts steht, was herauskommt, hier das Doppelte.

Aus 17, 9, 55, 97, 33 werden so 34, 18, 110, 194, 66. Den Namen zahl darf man frei wählen.

Aus Blatt 9, Aufgabe 1 („Preise um 10 % erhöhen: ein Lambda mit forEach“): Ein Lambda ist eine Methode ohne Namen: links vom Pfeil -> die Parameter, rechts das, was sie tut oder zurückgibt.
Noch 4 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Das Fließband

jede Zahl an jeder Station

Abbildung 1Das Fließband

jede Zahl an jeder Station

Zahlmap: · 2map: Stringfilter: „1…“?forEach: Ausgabe
17
34
"34"
nein
–
9
18
"18"
ja
18
55
110
"110"
ja
110
97
194
"194"
ja
194
33
66
"66"
nein
–
LegendeEine Zeile je Zahl, eine Spalte je Station des Streams.

Abbildung 1Das Fließband

jede Zahl an jeder Station

List<Integer> zahlen = List.of(17, 9, 55, 97, 33); zahlen.stream()        .map(zahl -> zahl * 2)        .map(zahl -> Integer.toString(zahl))        .filter(text -> text.startsWith("1"))        .forEach(text -> System.out.println(text));