Streaming

MTwain

Mitglied
Hallo liebe Forenmitglieder,

ich bräuchte euren Rat bei einer weiteren Streaming-Frage. Ich arbeite immernoch an meinem Projekt und habe eine neue Möglichkeit gefunden das Streaming zu testen. Aber grade was die Schreibweise bei Streams angeht blicke ich immernoch absout nicht durch. Darum geht es:

Ich habe eine ArrayList in der sich Objekte vom Typ Invoice befinden. Die Invoice-Objekte besitzen ein Datum vom Typ LocalDate. Folgendes möchte ich erreichen: Aus der Liste soll zunächst ausgelesen werden, aus welchen Jahren die die Rechnungen stammen. Zudem soll ermittelt werden wieviele Rechnungen zu den ermittelten Jahren gehören.

Meine biserigen Überlegungen haben zu etwas geführt das ungefähr so aussieht:
Java:
Map<LocalDate, Long> counter = invoiceList.stream()
                .collect(Collectors
                  .groupingBy(Invoice::getDate, Collectors
                  .counting()));

Das funktioniert im Ansatz eigentlich auch ganz gut, nur hätte ich eigentlich gerne, statt dem "getDate" nur das Jahr des Datums. Aslo eine Art getDate.Year(). Allerdings weiß ich nicht, wie ich das formulieren soll. Oder ob ich möglicherweise einen entsprechenden getter im Invoice Objekt anlegen muss.

Vielen Dank vorab!
 

Tarrew

Top Contributor
Die Klasse LocalDate hat eine getYear Methode. Entsprechend ändert sich dann auch der Typ der Map. Zum Beispiel so:
Java:
Map<Integer, Long> counter = invoiceList.stream()
        .collect(Collectors.groupingBy(e -> e.getDate().getYear(), Collectors.counting()));
 

MTwain

Mitglied
Die Klasse LocalDate hat eine getYear Methode. Entsprechend ändert sich dann auch der Typ der Map. Zum Beispiel so:
Java:
Map<Integer, Long> counter = invoiceList.stream()
        .collect(Collectors.groupingBy(e -> e.getDate().getYear(), Collectors.counting()));
Danke das funktioniert perfekt!
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben