Создать из списка <Date>список <List <Date>> со всеми датами, которые впоследствии заносятся в списки - PullRequest
1 голос
/ 28 августа 2010

Надеюсь, ты меня понял.Трудно описать на английском для меня.Итак, у меня есть список отсортированных объектов даты.Теперь я хочу поместить все Даты подряд (16.12.09, 17.12.09, 18.12.09 ...) в свой собственный Список.Автономные даты также должны быть внесены в собственный список.

Итак, из (12/01/09; 12/02/09; 12/03/09; 12/06/09; 12/10/09; 12/17/09; 12/18/09; 12/31/09) Я хочу создать

[(12/01/09; 12/02/09; 12/03/09)(12/06/09)(12/10/09)(12/17/09; 12/18/09)(12/31/09)]

Код, который у меня работаетНо это так сложно, что мне было интересно, может быть, есть более легкий путь.К сожалению, я не могу использовать Joda-Time.может быть, кто-то делал это раньше ...

public List<List<Date>> listOfDatestoList(List<Date> dates){

    List<List<Date>> list = new ArrayList<List<Date>>();

    List<Date> theseDates = new ArrayList<Date>();


    if(dates.size() == 1){
        theseDates.add(dates.get(0));
        list.add(theseDates);
        return list;
    }

    for (int i = 0; i < dates.size() - 1; i++) {        
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();

        //Die ersten beiden Daten der Liste werden verglichen
        cal1.setTime(dates.get(i));
        cal2.setTime(dates.get(i + 1));

        cal1.add(Calendar.DAY_OF_YEAR, 1);


        if(cal1.equals(cal2)){
            theseDates.add(dates.get(i));
        }

        else if(theseDates.size() > 0){
            theseDates.add(dates.get(i));

            List<Date> tempList = new ArrayList<Date>();
            for(Date date : theseDates){
                tempList.add(date); 
            }
            list.add(tempList);
            theseDates = new ArrayList<Date>();
        }
        else{
            List<Date> tempList = new ArrayList<Date>();

            tempList.add(dates.get(i));
            list.add(tempList); 
        }

        if(i == dates.size() - 2){

            if(cal1.equals(cal2)){
                theseDates.add(dates.get(i + 1));
            }

            if(theseDates.size() > 0 ){
                list.add(theseDates);
                theseDates = new ArrayList<Date>();
            }
            else{
                List<Date> tempList = new ArrayList<Date>();
                tempList.add(dates.get(i+1));
                list.add(tempList);
            }

        }
    }
    return list;
 }  

1 Ответ

2 голосов
/ 29 августа 2010

Попытка, не проверенная, но должна быть близка к тому, что вам нужно (псевдокодированный код даты)

List<Date> dates = ...;
List<List<Date>> dateList = new ArrayList<List<Date>>();

List<Date> currentList = new ArrayList<Date>();
for (Date date : dates)
{
   if (currentList.isEmpty())
   {
       currentList.add(date);
       continue;
   }

   Date lastDate = currentList.get(currentList.size() - 1);

   if (date is one day after lastDate)
   {
       currentList.add(date);
       continue;
   }

   dateList.add(currentList);
   currentList = new ArrayList<Date>();
   currentList.add(date);
}

if (!currentList.isEmpty())
   dateList.add(currentList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...