我有以下while
循环:
while (!inputDateCalendar.after(endYearCalendar) && !vacations.contains(newLesson.getDate())) {
// Do stuff
}
inputDateCalendar
和endYearCalendar
都属于GregorianCalendar
类型。
vacations
是ArrayList
,其中包含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,但我现在想这样试试。
答案 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();
}