Summieren wenn

Ich habe eine Liste 1. S
spalte Datum und uhrzeit 2. Spalte Anzahl
Nun möchte ich, eine stündliche Summe der Anzahl haben .
Dafür müssten die Zeilen bei der Spalte mit Anzahl solange addiert werden bis es das Datum und die Uhrzeit erreicht hat die ca. Ne Stunde ist

Wie kann ich da vorgehen?

Mir array und if abfrage ?
 
Hier mal ein wenig Code. Für Dich relevant ist in erster Linie die Methode summiere(). Die ließe sich mit Streams und Lambdas wesentlich kürzer schreiben, aber ich denke, Du solltest erstmal damit zurecht kommen ;)

Java:
import java.time.*;
import static java.time.temporal.ChronoUnit.HOURS;
import java.util.*;

public class Test {
    static class Eintrag {
        final LocalDateTime zeit;
        final int anzahl;
        
        public Eintrag(LocalDateTime zeit, int anzahl) {
            this.zeit = zeit;
            this.anzahl = anzahl;
        }            
        
        @Override
        public String toString() {
            return "[" + zeit.toString() + "/" + anzahl + "]";
        }
    }
    
    public static void main(String[] args) {
        List<Eintrag> eintraege = createDummies();
        Map<LocalDateTime, Integer> summen = summiere(eintraege);
        System.out.println("Eintraege: " + eintraege);
        System.out.println("Summen: " + summen);
        
    }
    
    private static Map<LocalDateTime, Integer> summiere(
            List<Eintrag> eintraege) {
        Map<LocalDateTime, Integer> summen = new HashMap<>();
        
        for (Eintrag e : eintraege) {
            LocalDateTime hour = e.zeit.truncatedTo(HOURS);
            if (!summen.containsKey(hour)) {
                summen.put(hour, 0);
            }
            summen.put(hour, summen.get(hour) + e.anzahl);
        }
        
        return summen;
    }
    
    private static List<Eintrag> createDummies() {
        Random rand = new Random(1L);
        LocalDateTime start = LocalDateTime.parse("2019-04-18T22:00");
        
        List<Eintrag> eintraege = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            LocalDateTime cur = start.plusMinutes(rand.nextInt(400));
            eintraege.add(new Eintrag(cur, rand.nextInt(20)+1));
        }
        
        return eintraege;
    }
}
 
Vielen Dank :) was sind streqms und lambdas ? Ich bin Anfänger...
S. Antwort von @M.L. ; konkret würde das z. B. so aussehen:
Java:
    private static Map<LocalDateTime, Integer> summiere(
            List<Eintrag> eintraege) {
        return eintraege.stream()
            .collect(groupingBy(e -> e.zeit.truncatedTo(HOURS),
                                summingInt(e -> e.anzahl)));
    }
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben