JavaFX Streams

AvaJ2

Mitglied
Hallo,

ich bin gerade dabei mich mit streams auseinander zu setzen.
Ich arbeite mit Javafx und habe in meiner Controller klasse eine Methode geschrieben, die in einer ArrayList all das speichert, was in meine Listview eingetragen wurde.
Nun hab ich dementsprechend ein Button erstellt, die diese Liste sortieren soll.
Zunächst hab ich es ohne stream gemacht, hat auch super funktioniert, da ich aber mich mit streams besser befassen will hab ich es daher durch einen stream ersetzt, was jedoch nicht funktioniert hat.
Nun ich hab heute schon einiges über streams gelesen, aber so wirklich kapiere ich es nicht.
Wie kann ich meine sortierte Stream auch in der GUI anwenden?

Java:
List<String>  list= new ArrayList<>();

public void handleSorted(ActionEvent e){
                 list.stream()
                .sorted()
                .forEach(System.out::println);
}

Ich habe es mit listView.getItems().addAll(list); versucht ohne erfolg (ohne streams hat es jedoch mit getItems funktioniert).

Kann mir einer helfen woran es liegt?
 

Flown

Administrator
Mitarbeiter
Ich geh mal nicht näher ins Detail. Wenn du näheres über das Arbeiten mit Streams erfahren willst sieh dir bitte das Tutorial von Oracle an.

Streams arbeiten nicht auf der Basis, d.h. die Liste wird nie verändert. Du hast jetzt zwei Möglichkeiten:
- mit Streams arbeiten und einen Collector verwenden und die Liste mit der neuen ersetzen(list = list.stream().sorted().collect(Collectors.toList());)
- besser aber: einfach List::sort aufrufen mit der natürlichen Ordnung: list.sort(Comparator.naturalOrder());
 

AvaJ2

Mitglied
Ich hätte da noch zu streams eine Frage, die mir gerade eingefallen ist.
Soweit ich verstanden habe dienen parallel streams dazu, eine Collcetions in mehrere zu verteilen und mehreren Threads zu übergab, worauf am ende diese zusammen gefügt werden.
Muss man entsprechend Threads deklarieren oder hab ich es richtig verstanden, dass das nicht nötig ist und ist es dann nicht sinnvoll immer ein parallel stream zu erzeugen?
 

InfectedBytes

Top Contributor
die jvm kümmert sich selbst um die erzeugung der threads.
Es ist nicht immer sinnvoll parallel streams zu nutzen. Es kommt halt auf dein problem an
 

Neue Themen


Oben