Stream und LocalDate

Wuast

Bekanntes Mitglied
Passt das zusammen? Ich habe recherchiert, wie ich eine Liste nach LocalDates sortieren kann und bin darauf gestoßen, dass das auch mit Streams gehen sollte.
Eclipse sieht das aber anders. Liegt das an mir oder meiner Umsetzung oder passt das einfach nicht?

Java:
private List <cf> sortListforDates() {
        List <cf> financesSortedForDate = date.getCfDate()
                                                .stream()    //hier will er nicht
                                                .Comparator.comparing(CashFlow :: getCfDate)
                                                .collect(Collectors.toList());
        return cf;
    }

Würd mich über ne kurze Rückmeldung freuen.
Danke :)
 

LimDul

Top Contributor
Natürlich geht das, sofern, sofern man es richtig macht.

Was hier fehlt ist ein Verständnis was für Datentypen du da hast. Das sieht aber so falsch aus.

Die Methode stream() geht nur auf Listen - ich vermute mal date.getCfDate() lieft ein Datum zurück. Ein Datum kann man nicht streamen. Du willst laut deinem Code ein Datum nach einem Datum sortieren

Du sagst quasi "Sortiere mir das Objektt 07.12.2022". Das geht nicht.

Du musst schon die Liste deiner (vermutlich CashFlow?) Objekte streamen und dann diese Liste sortieren.
 

Wuast

Bekanntes Mitglied
Ajo du hast recht.. ich habe gar nicht die Liste gestreamt :D

Und wie füttere ich den Comparator richtig? Der möchte LocalDate jetzt nicht mehr haben..
Java:
private List <cf> sortListforDates() {
        List <CashFlow> financesSortedForDate = getCfList()
                                                .stream()
                                                .Comparator.comparing//LocalDate//(CashFlow :: getCfDate)
                                                .collect(Collectors.toList());
        return financesSortedForDate;
    }
mies auskommentiert, aber wollte die Stelle deutlich machen.
 

LimDul

Top Contributor
Comparator.comparing(CashFlow::getCfDate) ist schon korrekt, sondern die Methode getCfDate des CashFlow Objektes ein Objekt zurückliefert was Comparable implementiert (wie z.B. ein LocalDate). Allerdings fehlt der sorted aufruf drum rum

Also
Java:
 getCfList().stream().sorted(Comparator.comparing(CashFlow::getCfDate)).collect(....);
 

Wuast

Bekanntes Mitglied
Comparator.comparing(CashFlow::getCfDate) ist schon korrekt, sondern die Methode getCfDate des CashFlow Objektes ein Objekt zurückliefert was Comparable implementiert (wie z.B. ein LocalDate). Allerdings fehlt der sorted aufruf drum rum

Also
Java:
 getCfList().stream().sorted(Comparator.comparing(CashFlow::getCfDate)).collect(....);
die Methode getCfDate entstammt einer anderen Klasse. dann brauche ich doch date.getCfDate() ... aber das ist kein funktionales interface.
aber ich komme an das LD auch über die Klasse CashFlow, getIncomeDate und dann geht es auch :)

Ich danke dir.
 

Wuast

Bekanntes Mitglied
hm das ist eine gute Frage. Woher soll der Collections.sort denn wissen, wonach der die Objekte in der Liste sortieren soll? Da gibts ja einmal das LocalDate aber auch Doubles und Strings.

mir kam gerade eher noch der Gedanke, ob ich nicht eine mapToLocalDate brauche (die es aber nicht zu geben scheint) und insofern wohl eher Blödsinn. :)
 

KonradN

Super-Moderator
Mitarbeiter
Woher soll der Collections.sort denn wissen, wonach der die Objekte in der Liste sortieren soll?
Tipp: Einfach mal auf den Link klicken.

Das ist immer das Gleiche: Entweder es gibt eine "natural Order" (Die Klasse implementiert Comparable<T>) oder es wird ein Comparator mitgegeben. Also 1:1 wie bei der Sortierung im Stream.
 

Wuast

Bekanntes Mitglied
Ok für mich zum Verständnis: Wo liegt der Vorteil darin? Wenn ich jetzt überall das Interface implementieren muss, wird der Code dadurch nicht "komplizierter" als wenn ich einfach nur eine Methode mit einem Stream habe?
 

httpdigest

Top Contributor
Du kannst Comparable<T> implementieren, wenn du die Klasse selbst ändern darfst/kannst. Das ist natürlich bei LocalDate eher nicht der Fall.
Für die Fälle, wo du für dich nicht änderbare Klassen um die Funktionalität der Vergleichbarkeit zwecks Sortierung erweitern möchtest, existiert eben die Möglichkeit, den Sortierungsmethoden einen Comparator explizit mitzugeben.
Desweiteren kann es in manchen Situationen durchaus Sinn machen, eben nicht nur die natürliche Ordnung zu haben, sondern pro Anwendungsfall Objekte desselben Typs nach unterschiedlichen Kriterien zu sortieren. Auch dafür ist ein bzw. sind mehrere externe Comparatoren sinnvoll.
 

KonradN

Super-Moderator
Mitarbeiter
Wenn ich jetzt überall das Interface implementieren muss
Musst Du doch nicht. Das ist doch ein funktionales Interface. Und das hast Du in der Stream Lösung doch auch, denn sorted nimmt doch auch einen Comparator: .sorted(Comparator.comparing(CashFlow::getCfDate))

So wie Du da den Comparator Comparator.comparing(CashFlow::getCfDate) nutzt, kannst diesen auch in Collections.sort nutzen.

Also etwas wie:
Java:
List<WhatEver> list = getCfList();
Collections.sort(list, Comparator.comparing(CashFlow::getCfDate));

(Die Typen müssen natürlich angepasst werden ... bekomst Du da eine List von LocalDate? Dann wäre es ein List<LocalDate> ....)
 

Wuast

Bekanntes Mitglied
Okay, ich habs geschnallt, danke Leute :)

Aber nochmal kurz die Rückfrage zum Verständnis, warum du den Vorschlag überhaupt gemacht hast @KonradN : Wo liegt der Vorteil? Performance besser? Weniger Tipparbeit?
 

KonradN

Super-Moderator
Mitarbeiter
Man sollte seinen Code einfach halten. Keep it simple, stupid.

Und es ist Quatsch, sich Code für Dinge auszudenken, die schon längst implementiert sind.

Daher: Lern einfach, was es alles im Java Framework für tolle Klassen gibt und wie man diese einsetzen kann.
 

Wuast

Bekanntes Mitglied
hihi einfach :D
Gibt es da irgendwo eine entspannte Übersicht oder muss ich mich durch die Docs wühlen und über google fallabhängig recherchieren? :) Ich kann ja gefühlt niemals die Übersicht behalten was es alles schon gibt.
aber von KISS habe ich letztens auch erstmals gelesen!

Ich werde es berücksichtigen und anpassen. Danke für deine bzw eure Rückmeldungen.
 

KonradN

Super-Moderator
Mitarbeiter
Das Lernen kann ja auch über das Forum erfolgen. Wenn Du so einen Link bekommst, dann kannst Du den nachlesne und damit etwas spielen.

Das Collections Framework von Java ist aber schon ein sehr zentraler Bestandteil - damit sollte man sich schon etwas mehr auseinander setzen. Aber vieles kommt mit der Zeit. Nur eben muss man offen für so Anregungen sein um dann dazu zu lernen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
O Alternative zu Stream.forEach() Java Basics - Anfänger-Themen 6
Dimax stream in string[] speichern Java Basics - Anfänger-Themen 6
S Java Stream API Java Basics - Anfänger-Themen 6
A Stream Java Basics - Anfänger-Themen 14
N String N-Gramme mit Stream erstellen Java Basics - Anfänger-Themen 7
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
J Count und Copy in Stream<Path> Java Basics - Anfänger-Themen 11
W for Schleife in allgemeingültiges Konstrukt aus Stream und Lambdas Java Basics - Anfänger-Themen 6
W Stream Array List - Frage Java Basics - Anfänger-Themen 5
G refactoring mit stream Java Basics - Anfänger-Themen 27
P Java Verketten von Stream - Bedeutung der Anweisungen? Java Basics - Anfänger-Themen 3
nightsky_ Methoden (Stream) Collectors.toMap() Java Basics - Anfänger-Themen 2
W HTTP-Stream auf Ajax umbauen Java Basics - Anfänger-Themen 7
elischa Client-Server IO und Stream Steuerung ? Java Basics - Anfänger-Themen 2
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
E Stream closed - Obwohl nicht manuell geschlossen! Java Basics - Anfänger-Themen 0
N Java.io.ioexception: Stream closed Java Basics - Anfänger-Themen 2
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
S Input/Output nullpointerException beim schliessen von stream Java Basics - Anfänger-Themen 3
A Integer aus Stream to Double Java Basics - Anfänger-Themen 7
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
M Java Stream?! Java Basics - Anfänger-Themen 8
S Input/Output Data-Input/Output-Stream Java Basics - Anfänger-Themen 2
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
J Input/Output Auf effiziente Weise einen Stream auszulesen Java Basics - Anfänger-Themen 5
M Stream close Java Basics - Anfänger-Themen 6
A Prüfen ob Datei geöffnet ist bzw Stream finden Java Basics - Anfänger-Themen 2
H exception "java.io.IOException: Stream closed" Java Basics - Anfänger-Themen 10
Burny91 File.delete(file) geht nicht-Offener Stream aber WO? Java Basics - Anfänger-Themen 4
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
H Fehler-Stream grafisch umsetzen Java Basics - Anfänger-Themen 4
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
S Fehler beim Speichern von MP3-Stream Java Basics - Anfänger-Themen 6
bambi0815 Text Datei Stream to Char[][] Java Basics - Anfänger-Themen 7
D JSP: IOException: Stream closed nach dispatchter.forward(..) Java Basics - Anfänger-Themen 13
G Warum bei Stream close() aufrufen. Java Basics - Anfänger-Themen 12
G NoClassDefFoundError: javax/xml/stream/XMLStreamException Java Basics - Anfänger-Themen 23
P Stream Java Basics - Anfänger-Themen 4
alexpetri javax.xml.stream.* nicht gefunden Java Basics - Anfänger-Themen 3
M Stream unvollständig Java Basics - Anfänger-Themen 5
Zed Stream in Variable speichern. Java Basics - Anfänger-Themen 3
M Input/Output Stream aus einem String Java Basics - Anfänger-Themen 2
S Schreib Stream Java Basics - Anfänger-Themen 21
M Stream in String umwandeln Java Basics - Anfänger-Themen 5
K datei komplett als Stream oder ähnliches Java Basics - Anfänger-Themen 4
A Serialisierbarer Stream? - File per RMI versenden Java Basics - Anfänger-Themen 4
R Binary Stream in Bild umwandeln Java Basics - Anfänger-Themen 5
C Position im Objekt-Stream Java Basics - Anfänger-Themen 2
M Ausgabe in String anstatt auf Stream Java Basics - Anfänger-Themen 17
C Stream-Konzept Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
MiMa Date vs LocalDate/LocalDateTime Java Basics - Anfänger-Themen 13
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
W LocalDate vergleichen mit Equals? Java Basics - Anfänger-Themen 7
D Datentypen LocalDate.parse() ergibt Fehler Java Basics - Anfänger-Themen 5
I JAX-RS LocalDate / LocalTime? Java Basics - Anfänger-Themen 5
T LocalDate to String Java Basics - Anfänger-Themen 1
B JAXB und LocalTime / LocalDate / LocalDateTime Java Basics - Anfänger-Themen 1
G convert Date to LocalDate Java Basics - Anfänger-Themen 11
G convert Optional<Date> into Optional<LocalDate> Java Basics - Anfänger-Themen 6
M Datentypen LocalDate.of() in LocalDate.of() (UTC) Java Basics - Anfänger-Themen 1
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
N Mit LocalDate alter berechnen Java Basics - Anfänger-Themen 3
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
A Datums-Differenzen mit LocalDate (Java 8) - Seltsame Differenzwerte Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben