reduce

Mariexshhx

Bekanntes Mitglied
Java:
reduce(
    new ArrayList<Integer>(),
    (acc, e) -> {
        ArrayList<Integer> newAcc = new ArrayList<>(acc); // erstellt neue ArrayList als Kopie von acc
        newAcc.add(e+1);
        return newAcc;
    },
    List.of(1,2,3)
)

Verstehe ich das richtig, dass diese Funktion die Liste kopierst und dann zu jedem Wert 1 addiert und diesen Wert auch in die Liste einfügt ?
so dass man am Ende (1,2,3,2,3,4) hat oder was tut dieses (e+1) Ich bin mir allgemein unsicher was e ist ...
 

blaBra

Mitglied
Und deine Frage ist unpräzise formuliert. Du möchtest wissen, was e bedeutet und was (e+1) bedeutet. e ist die bisherige Summe der bisher durch den Stream verarbeiteten Werte. +1 ist trivial zu erklären. e ist die Summenvariable, wenn man so möchte.
 

blaBra

Mitglied
hoffe... hab jetzt nicht falsch geantwortet, denn dein Beispiel ist eigentlich nicht vollständig und man muss immernoch Annahmen treffen ...
 

mihe7

Top Contributor
Aber ist es bei reduce nicht so, dass immer der Wert aus der vorherigen Rechnung in die neue mit einbezogen wird ?
Vielleicht solltest Du mal schreiben, woher Du die Funktion hast. Wäre das Stream#reduce (was angesichts des dritten Parameters schlecht möglich ist), dann ergibt Zeile 5 keinen Sinn, denn der Typ T der Elemente wäre ArrayList<Integer>.

Und die Logik dazu ist in der Doku genauestens beschrieben: T reduce(T identity, BinaryOperator<T> accumulaor) führt eine Reduktion durch, die äquivalent zu
Java:
     T result = identity;
     for (T element : this stream)
         result = accumulator.apply(result, element)
     return result;
ist
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben