Lesbarkeit von Streams

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");
 
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
 
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.
 
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)
 
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.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben