Prüfen, ob Zeit Überschreitung

beta20

Top Contributor
Hallo,

Ich habe eine Liste von Objekte, die eine Start und Endzeit haben.

MyEntity:
- LocalTime startDate;
- LocalTime endDate;

Nun habe ich eine Liste von dieser Entity: List<MyEntity> list;

Was ich nun prüfen mochte, ob es Überschneidungen gibt:
Bpsw.

Objekt1:
- startDate: 09:00 Uhr
- endDate: 17:00 Uhr

Objekt2:
- startDate: 08:00 Uhr
- endDate: 17:00 Uhr

Java:
boolean check(List<MyEntity> list) {
?????
}

Heißt in diesem Beispiel gibt es eine Zeitüberschreitung. Wie kann ich das prüfen?
 
Das kannst Du mir einem Sweep erledigen. Dazu brauchst Du eine Struktur, aus der Du den Zeitpunkt und die "Seite" (Start oder Ende) ablesen kannst. Quick & Dirty (kann Fehler enthalten):
Java:
static class Event implements Comparable<Event> {
    LocalDate date;
    boolean start; // true, falls date ein Startdatum ist
    Event(LocalDate date, boolean start) { this.date = date; this.start = start; }

    public compareTo(Event e) {
        int result = date.compareTo(e.date);
        return (result == 0) ? (start ? -1 : 1) : result;
    }
}

Java:
List<Event> events = Stream.concat(
        list.stream().map(entity -> new Event(entity.startDate, true),
        list.stream().map(entity -> new Event(entity.endDate, false)
    ).sorted().collect(toList());

int c = 0;
for (Event e : events) {
    if (e.start) {
        if (c > 0) { return true; }
        c++;
    } else {
        c--;
    }
}
 

Zurück
Oben