Stream API, Anonyme Klasse

Sandro95

Bekanntes Mitglied
Guten abend leute,
ich komme bei Aufgabe 2.2 nicht weiter. Aufgabe 2.1 habe ich wie folgt gelöst.

import java.awt.List;
import java.util.ArrayList;
import java.util.Collection;

public class StreamAPI {

public static void main(String[] args) {

ArrayList list1 = new ArrayList();
list1.add(3);
list1.add(3);
list1.add(12);
list1.add(27);

System.out.println(sum(list1));



}

public static int sum(Collection<Integer> liste) {
return liste.stream().reduce(0,(a,b)-> a+b);

}


}

Nun soll ich das ganze anhand einer anonymen Klasse und der Stream API machen , leider bin ich dort iwie aus dem Konzept.. Könnte mir jmd vlt auf die Sprünge helfen ?

lg und danke im voraus!
 

Anhänge

  • WhatsApp Image 2020-08-23 at 23.28.10.jpeg
    WhatsApp Image 2020-08-23 at 23.28.10.jpeg
    76 KB · Aufrufe: 9
Für was steht denn der Lambda Ausdruck?
Oder anders formuliert: Was für Parameter hat reduce?

Wenn du weisst, was da erwartet wird: wie kannst du das per anonymer Klasse übergeben?
 
Für was steht denn der Lambda Ausdruck? ⁴
Oder anders formuliert: Was für Parameter hat reduce?

Wenn du weisst, was da erwartet wird: wie kannst du das per anonymer Klasse übergeben?
 
Ahh, ok, das ist dann der 0 Uhr Effekt ... sorry für Doppelpost ... Forum reagierte irgendwie nicht ... aber dann habe ich das jetzt auch mal erleben dürfen 🙂
 
anonyme kalsse nfür zB ein EventHanlder weiß ich wie die gehen , aber hierbei bin ich iwie durcheinader , ich weiß nicht von welcher klasse ich eine anonyme erstellen soll
 
Nein, die Parameter hast du nicht richtig benannt. Wenn du https://docs.oracle.com/javase/8/do...l#reduce-T-java.util.function.BinaryOperator-
anschaust, dann siehst du, dass der erste Parameter T und der zweite BinaryOperator<T> ist.

T ist dabei der Typ, den du Streamst (also bei dir Integer)

Das (a,b) -> .... ist also ein Lambda Ausdruck für ein Interface. Wenn man das anschaut, dann findet man zwei Methoden. Da eine (andThen) eine default Implementation hat, haben wir ein funktionales Interface (Musste ja so sein, denn sonst wäre der Lambda Ausdruck nicht gegangen).

Also brauchen wir eine anonyme Klasse, die das Interface implementiert (BinaryOperator<Integer>).

Wenn du das vom EventHandler kennst: da hast du es auch gemacht, nur da war es dann ein XyzListener Interface .. also so ein Konstrukt wie new MouseListener() {...}

Reicht das für ein Verständnis und die Umsetzung der Aufgabe? Oder müsste man noch etwas mehr ins Detail gehen?

(Wäre aber bei mir dann erst nach dem Aufstehen ... für mich ist jetzt schlafenszeit ... und am Handy schreibt es sich auch nicht so gut ....)

Edit: BinaryOperator wurde an einer Stelle BinaryOperation was ich behoben habe.
 

Neue Themen


Zurück
Oben