Java 使用while循环检查ArrayList中的日期是否介于两个日期之间
我有以下Java 使用while循环检查ArrayList中的日期是否介于两个日期之间,java,date,arraylist,while-loop,calendar,Java,Date,Arraylist,While Loop,Calendar,我有以下while循环: while (!inputDateCalendar.after(endYearCalendar) && !vacations.contains(newLesson.getDate())) { // Do stuff } inputDateCalendar和endYearCalendar都是gregorianalendar类型。 vacations是一个ArrayList,其中包含类型为Vacation的项目 public Vacation(St
while
循环:
while (!inputDateCalendar.after(endYearCalendar) && !vacations.contains(newLesson.getDate())) {
// Do stuff
}
inputDateCalendar
和endYearCalendar
都是gregorianalendar
类型。
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
不在endYearCalendar
之后执行,并且休假
不包含列表中任何休假
的开始日期
和结束日期
之间的日期
我知道人们会推荐Joda time,但我现在想这样尝试。正如Mou所指出的,您似乎有一些类型的问题-我认为您必须遍历假期列表并检查日期:
while(!inputDateCalendar.after(endYearCalendar)) {
for(Vacation vacation : vacations) {
if(newLesson.getDate().after(vacation.getStartDate()) && newLesson.getDate().before(vacation.getEndDate()))
do.stuff();
}
}
您可以使用用户
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();
}
私有静态类LessonPredicate实现谓词{
私人课;
公共课(第一课){
这个.课=课;
}
@凌驾
公共布尔应用(假期){
返回lesson.getDate().之后(休假.getStartDate())和&lesson.getDate().之前(休假.getEndDate())
}
}
而(!inputDateCalendar.after(endYearCalendar)和&!Collections2.filter(vacations,newlessonpredicate(newLesson)).isEmpty()){
do.stuff();
}
vacations是度假对象的数组列表,您正在按日期类型在contains中搜索?什么是新课程?问题在哪里?这是Joda时间库而不是YodaSo,你需要确保你的假期列表已排序,假设没有重叠的假期,并且你需要编写一个基于给定日期的二进制搜索方法contains()
对您没有帮助,它用于查找特定的假期。(a)OP仅在课程不在任何假期内时才想做一些事情。(b) 线性搜索不是很有效。谢谢你,我会在添加一个后尝试这个!所以它会做我想做的。我会让你知道它是否只在课程不在假期列表中时才运行do.Stuff
。这是线性搜索,非常有效。是的,不是,但没有人要求更有效的方法。