2016-08-04 9 views
2

Ich habe eine Liste der Datumsangaben (technisch Joda LocalDateTime-Objekte) in Java. Ich möchte eine komprimierte Form der Liste ausdrucken, die alle Datumsbereiche zusammenfasst. So etwas wie die folgende Liste:Konvertieren Sie eine Liste von Datumsangaben in eine Zeichenfolge von Datumsbereichen

2013-11-24 
2013-11-25 
2013-11-26 

2013-11-28 
2013-11-29 
2013-11-30 


2013-12-03 

2013-12-05 
2013-12-06 
2013-12-07 
2013-12-08 
2013-12-09 
2013-12-10 
2013-12-11 

würde die folgende Ausgabe drucken:

2013-11-24->2013-11-26, 2013-11-28->2013-11-30, 2013-12-03, 2013-12-05->2013-12-11 

Gibt es eine effizientere Möglichkeit, dies zu tun, als manuell über die Liste iterieren, um den nächsten Wert zu vergleichen und den Bau Strings ?

+0

Ohne Iterieren, Vergleichen und Konstruieren von Strings wahrscheinlich nicht. Aber mit Java 8 können Sie Streams ausprobieren, um etwas Kompaktes zu machen. – noscreenname

+0

Dies ist die Unterstützung für eine Java 7-Anwendung, also ist das leider nicht viel hilfreich für uns –

+0

können wir erwarten, dass die eingegebenen Daten bereits sortiert sind? – JavaHopper

Antwort

0

Ich würde eine Klasse für diese erstellen. Erstellen Sie ein Objekt dieser Klasse und überprüfen Sie das nächste Datum mit isFollowing(). Wenn es wahr ist, setzen Sie das Enddatum auf das geprüfte Datum (setEnd(dateToCheck)). Wenn nicht, erstellen Sie ein neues DateRange-Objekt. Es ist erforderlich, dass Ihre Werte vorher sortiert sind.

public class DateRange { 

    private Date mStart; 
    private Date mEnd; 

    public DateRange(Date start) { 
    mStart = start; 
    mEnd = start; 
    } 

    public DateRange(Date start, Date end) { 
    mStart = start; 
    mEnd = end; 
    } 

    public boolean isInside() { 
    // create your code 
    } 

    public boolean isFollowing(Date dateToCheck) { 
    // create your code 
    // check if dateToCheckis after start and end date 
    // and the difference between end and dateToCheckis must be one day 
    } 

    public Date getStart() { 
    return mStart; 
    } 

    public Date getEnd() { 
    return mEnd; 
    } 

    public void setStart(Date start) { 
    mStart = start; 
    } 

    public void setEnd(Date end) { 
    mEnd = end; 
    } 
} 
Verwandte Themen