Lesbarkeit von Streams

mihe7

Top Contributor
Wenn ich irgendwo unklar war einfach mal fragen
Ich frag einfach mal :) Die Projektnummern stehen in einer Datenbank? Oder sollst Du nur die Projektnummern in der Liste auf das aktuelle Jahr anpassen?

Java:
public static List<String> aendereProjektnummern(List<String> bestehendeProjektnummern, String prefix) {
    return bestehendeProjektnummern.stream()
        .map(alteNr -> new StringBuilder(prefix).append(alteNr.subString(4)).toString())
        .collect(Collectors.toList());
}
Java:
List<String> neueNummern = aendereProjektnummern(alteNummern, "2020");
 

Thallius

Top Contributor
Java:
public static List<String> aendereProjektnummern(List<String> bestehendeProjektnummern, String prefix) {
    return bestehendeProjektnummern.stream()
        .map(alteNr -> new StringBuilder(prefix).append(alteNr.subString(4)).toString())
        .collect(Collectors.toList());
}

Und da behaupte mal jemand streams würden den Code leichter zu lesen machen....

Code:
public static List<String> aendereProjektnummern(List<String> bestehendeProjektnummern, String prefix) {
   List<String> neueList = new List<String>
   for(String nummer in bestehendeProjektnummern)
        neueListe.add(prefix + Nummer.subString(4));
   return neueList;
}

Das kann ich mit einem mal erfassen. Dein Konstrukt da oben muste ich 3x durchlesen...

Gruß

Claus
 

httpdigest

Top Contributor
Bevor hier schon wieder zum x-ten Male große Off-the-topic Diskussionen bezüglich Streams auftreten: Es ist völlig unsinnig, sich über die Lesbarkeit/Kompliziertheit von unterschiedlichen Lösungen mit jemandem (z.B. dir) zu unterhalten, der 99.99% seiner Entwicklerzeit mit Starren auf for-Schleifen verbracht hat und die restlichen 0.01% der Zeit mit kurzen Versuchen, Stream-basierte Lösungen zu verstehen.
Es ist einfach Gewohnheits-/Übungssache. Womit wir aufwachsen, bestimmt unseren Bias einfach massiv.
Ich persönlich finde die Stream-Lösung einfacher zu lesen, aber auch nur deshalb, weil ich vorher ein ganzes Jahr bei einem Kunden gekotzt habe, weil dort NUR und ausschließlich Stream-basierte Lösungen (sogar non-blocking mit Reactor) verwendet werden, und man sich wie im ersten Semester Informatikstudium fühlt. Ja, man muss komplett umdenken. Ja, es ist sehr schmerzhaft. Aber, wenn man die Learning Curve einmal überwunden hat, macht es Spaß und ist einfacher zu verstehen. Und nicht deshalb "einfacher", weil es objektiv einfacher ist (soetwas wie objektive Kompliziertheit/Einfachheit gibt es nicht), sondern weil die Gewohnheit wechselt.
 

mrBrown

Super-Moderator
Mitarbeiter
Das behauptet wohl niemand. ;)
Nicht jeden Code, aber oftmals machen sie Dinge leichter lesbar :)

Die Größere Hürde für Lesbarkeit würd ich hier auch in dem StringBuilder sehen, den @Thallius unter den Tisch fallen lassen hat.


Wenn man das ein bisschen refactored kommt da sowas raus:
Java:
public Stream<String> aendereProjektnummern(List<String> bestehendeProjektnummern) {
    return bestehendeProjektnummern.stream().map(this::konvertiereProjektnummer);
}

oder wenn man die Liste verändern kann (dann nicht mal mehr ein Stream sondern nur noch Funktional): bestehendeProjektnummern.replaceAll(this::konvertiereProjektnummer)
 

mihe7

Top Contributor
Oops, wasn hier los? :)

Das kann ich mit einem mal erfassen. Dein Konstrukt da oben muste ich 3x durchlesen...
Das liegt aber in erster Linie an meinem StringBuilder-Konstrukt, das mir aus purer Gewohnheit über die Finger rutscht (und den ewig langen Variablennamen :))

Aber selbst ohne Refactoring finde ich das hier
Java:
public static List<String> aendereProjektnummern(List<String> bestehendeProjektnummern, String prefix) {
    return bestehendeProjektnummern.stream()
        .map(alteNr -> prefix + alteNr.subString(4))
        .collect(Collectors.toList());
}
mittlerweile klarer zu lesen als
Java:
public static List<String> aendereProjektnummern(List<String> bestehendeProjektnummern, String prefix) {
   List<String> neueList = new List<String>
   for(String nummer in bestehendeProjektnummern)
        neueListe.add(prefix + Nummer.subString(4));
   return neueList;
}

Wobei ich sagen muss: geht beides.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Monokuma Lesbarkeit von Streams Allgemeine Java-Themen 6
K Lesbarkeit von Streams Allgemeine Java-Themen 5
G Stil-und Lesbarkeit des Codes Allgemeine Java-Themen 18
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
J Streams Allgemeine Java-Themen 6
LimDul Streams und Exception Allgemeine Java-Themen 8
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
N Streams wann .filtern? Allgemeine Java-Themen 2
A Lambda und Streams verstehen Allgemeine Java-Themen 4
J IO Streams Allgemeine Java-Themen 13
M Wie funktionieren parallele Java Streams? Allgemeine Java-Themen 1
R Collections BiPredicate in Java 8 Streams Allgemeine Java-Themen 7
F Umgehen mit übergebenen Streams Allgemeine Java-Themen 3
hdi Überwachen des err-Streams? Allgemeine Java-Themen 8
N read streams umleiten Allgemeine Java-Themen 2
DEvent GZIP Streams und gzip Allgemeine Java-Themen 2
S Streams zusammenfügen Allgemeine Java-Themen 4
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
C in Streams Allgemeine Java-Themen 4
M Sind Streams asynchron? Allgemeine Java-Themen 2
Saxony DOS Konsole und deren Streams Allgemeine Java-Themen 5
B Probleme mit Streams Allgemeine Java-Themen 5
T Zwei Streams verbinden Allgemeine Java-Themen 3
L Die Wahl des richtigen Streams? Allgemeine Java-Themen 3
G Video Streams mit Servlets Allgemeine Java-Themen 3
P Streams per Mail mit JavaMailAPI versenden Allgemeine Java-Themen 3
A Streams: merkwürdiges Verhalten Allgemeine Java-Themen 7
A Streams - merkwürdiges Verhalten Allgemeine Java-Themen 2
thE_29 Problem mit Streams Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben