使用while循环检查ArrayList中的日期是否在两个日期之间

时间:2014-12-27 12:44:02

标签: java date arraylist while-loop calendar

我有以下while循环:

while (!inputDateCalendar.after(endYearCalendar) && !vacations.contains(newLesson.getDate())) {
    // Do stuff
}

inputDateCalendarendYearCalendar都属于GregorianCalendar类型。 vacationsArrayList,其中包含Vacation类型的项目。

public Vacation(String type, String region, Date startDate, Date endDate, int schoolYear)
{
    this.type = type;
    this.region = region;
    this.startDate = startDate;
    this.endDate = endDate;
    this.schoolYear = schoolYear;
}

newLesson是一个Lesson对象:

public class Lesson {

    private int id;
    private int studentID;
    private String student;
    private String type;
    private Time duration;
    private double price;
    private Date date;
    private Time time;

}

所有这些都已确定。

现在我正在尝试确保循环仅在inputDateCalendar {/ 1}} endYearCalendar不包含介于两者之间的日期时执行。列表中任何vacations的{​​{1}}和startDate

我知道人们会推荐Joda-time,但我现在想这样试试。

2 个答案:

答案 0 :(得分:1)

正如Mou所指出的那样,您似乎遇到了一些类型问题 - 我认为您必须遍历假期列表并查看日期:

while(!inputDateCalendar.after(endYearCalendar)) {
    for(Vacation vacation : vacations) {
        if(newLesson.getDate().after(vacation.getStartDate()) && newLesson.getDate().before(vacation.getEndDate()))
            do.stuff();
    }
}

答案 1 :(得分:0)

您可以使用Collections2.filter 这样的事情应该做的工作。

private static class LessonPredicate implements Predicate<Vacation> {
    private Lesson lesson;
    public LessonPredicate(Lesson lesson) {
        this.lesson = lesson;
    }

    @Override
    public boolean apply(Vacation vacation) {
        return lesson.getDate().after(vacation.getStartDate()) && lesson.getDate().before(vacation.getEndDate())
    }
}

while(!inputDateCalendar.after(endYearCalendar) && !Collections2.filter(vacations, new LessonPredicate(newLesson)).isEmpty()) {
    do.stuff();
}