K
kneitzel
Gast
Hallo zusammen,
ich starte mal einen neuen Thread anstatt im anderen Thread zu antworten. Denn da bin ich dann eben über etwas gestolpert:
Ich nutze selbst gerne Streams von Zeit zu Zeit. Aber an ein paar Dingen störe ich mich doch immer wieder gerne mal.
Hier gab es ganz konkret zwei Dinge, die mir aufgefallen sind:
a) range - auf den ersten Blick habe ich mich gewundert. Wieso temperaturen.length? Klar - range / rangeClosed: Ersteres ist exklusive des Endes, Zweites ist incl. der Grenze. Dies empfinde ich nicht als wirklich intuitiv.
b) mapToObj - Sehr leistungsfähig und man kann einiges damit machen. Aber auch hier sehe ich das nicht wirklich als intuitiv lesbar an. (Dabei ist das hier auch noch ein sehr einfaches, übersichtliches Beispiel!)
Daher würde ich mir einmal die Frage erlauben, ob Ihr solche Konstrukte auch bei produktivem Code einsetzen würdet oder ob ihr da eher auf "klassischen" Code ausweichen würdet...
In meinem Code findet man Streams mehr bei einfachen Filter-, Sortier- und Aufruf-Aufgaben. Bei dem Beispiel hätte ich also auch eher eine Methode geschrieben, die das in einer Schleife herausfindet und dann den Treffer zurück gibt. Also wirklich 08/15 Java code
ich starte mal einen neuen Thread anstatt im anderen Thread zu antworten. Denn da bin ich dann eben über etwas gestolpert:
In diesem Forum wundert es mich schon fast, dass noch keiner mit Stream geschwungen hat
(Bitte nicht ernst nehmen, ein Prof will bestimmt keine Streams sehen)Java:int[] temperaturen = {12, 14, 7, 12, 15, 16, 15, 15, 11, 8, 13, 13, 15, 12}; IntSummaryStatistics stats = IntStream.of(temperaturen).summaryStatistics(); System.out.printf("Durchschnittstemperatur: %.2f°C%n", stats.getAverage()); System.out.printf("Minimale Temperatur: %d°C%n", stats.getMin()); System.out.printf("Maximale Temperatur: %d°C%n", stats.getMax()); int[] maxDiffData = IntStream.range(1, temperaturen.length) .mapToObj(i -> new int[]{ i, Math.abs(temperaturen[i-1] - temperaturen[i]) }) .max(Comparator.comparingInt(arr -> arr[1])) .get(); System.out.printf("Größter Umschwung von %d°C zwischen den Tagen %d und %d%n", maxDiffData[1], maxDiffData[0], maxDiffData[0] + 1);
Ich nutze selbst gerne Streams von Zeit zu Zeit. Aber an ein paar Dingen störe ich mich doch immer wieder gerne mal.
Hier gab es ganz konkret zwei Dinge, die mir aufgefallen sind:
a) range - auf den ersten Blick habe ich mich gewundert. Wieso temperaturen.length? Klar - range / rangeClosed: Ersteres ist exklusive des Endes, Zweites ist incl. der Grenze. Dies empfinde ich nicht als wirklich intuitiv.
b) mapToObj - Sehr leistungsfähig und man kann einiges damit machen. Aber auch hier sehe ich das nicht wirklich als intuitiv lesbar an. (Dabei ist das hier auch noch ein sehr einfaches, übersichtliches Beispiel!)
Daher würde ich mir einmal die Frage erlauben, ob Ihr solche Konstrukte auch bei produktivem Code einsetzen würdet oder ob ihr da eher auf "klassischen" Code ausweichen würdet...
In meinem Code findet man Streams mehr bei einfachen Filter-, Sortier- und Aufruf-Aufgaben. Bei dem Beispiel hätte ich also auch eher eine Methode geschrieben, die das in einer Schleife herausfindet und dann den Treffer zurück gibt. Also wirklich 08/15 Java code