В то время как другие ответы, которые уже даны, выглядят довольно простыми и приятными и содержат некоторые хорошие идеи (я особенно согласен с предложением Итератора от Nerdfest), я решил в любом случае дать этому шанс и написать решение, чтобы показать, как я я бы сделал это для первой итерации, я уверен, что есть возможность улучшить то, что ниже.
Я также, возможно, воспринял ваши требования слишком буквально, но вы знаете, как настроить код по своему вкусу. Ох и простите за ужасное именование объектов. Кроме того, поскольку в этом примере используется Calendar, помните, что Calendar.roll () в некоторых случаях может не обновлять весь объект Calendar, так что это потенциальная ошибка.
protected List<Calendar> getDatesWithNoData(Calendar start, Calendar end,
Calendar[] existingDates) throws ParseException {
List<Calendar> missingData = new ArrayList<Calendar>();
for(Calendar c=start ; c.compareTo(end)<=0 ; c.roll(Calendar.DAY_OF_MONTH, true) ) {
if(!isInDataSet(c, existingDates)) {
Calendar c2 = Calendar.getInstance();
c2.setTimeInMillis(c.getTimeInMillis());
missingData.add(c2);
}
}
return missingData;
}
protected boolean isInDataSet(Calendar toSearch, Calendar[] dataSet) {
for(Calendar l : dataSet) {
if(toSearch.equals(l)) return true;
}
return false;
}