2016-08-04 6 views
2

У меня есть список datetime (технически, объекты Joda LocalDateTime) в Java. Я хотел бы распечатать сжатую форму списка, сворачивая любые диапазоны дат. Что-то вроде следующего списка:Преобразование списка дат в строку диапазонов дат

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 

напечатает следующий вывод:

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

есть более эффективный способ сделать это, чем вручную итерацию по списку, сравнивая следующее значение, и построение строки ?

+0

Без итерации, сравнения и построения строк, возможно, нет. Но с java 8 вы можете выстрелить в потоки, сделать что-то компактное. – noscreenname

+0

Это поддержка приложения Java 7, поэтому, к сожалению, это не очень помогает нам –

+0

, можем ли мы ожидать, что ввод значений даты уже будет отсортирован? – JavaHopper

ответ

0

Я бы создал класс для этого. Создайте объект этого класса и проверьте следующую дату с помощью isFollowing(). Если это верно, установите дату окончания для отмеченной даты (setEnd(dateToCheck)). Если нет, создайте новый объект DateRange. Необходимо, чтобы ваши значения сортировались раньше.

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; 
    } 
} 
Смежные вопросы