Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查ArrayList中是否已存在具有特定日期的对象_Java_Object_Arraylist_Compare_Localdate - Fatal编程技术网

Java 如何检查ArrayList中是否已存在具有特定日期的对象

Java 如何检查ArrayList中是否已存在具有特定日期的对象,java,object,arraylist,compare,localdate,Java,Object,Arraylist,Compare,Localdate,我被困在我正在做的一个项目中。所以我写了一个酒店类(家长)和一个预订类(孩子) 在我的预订课上,我创建了新的酒店预订。我的预订构造函数采用以下参数预订(字符串名称、字符串电子邮件、int-phonenum、LocalDate-fromDate、LocalDate-toDate)。 但是,我现在想检查在创建新预订时是否已经进行了预订。 我所有的对象都保存在一个数组列表中,但考虑到我构建日期的方式,我真的不知道该怎么做。任何针孔将不胜感激 编辑: public List addBooking(int

我被困在我正在做的一个项目中。所以我写了一个酒店类(家长)和一个预订类(孩子)

在我的预订课上,我创建了新的酒店预订。我的预订构造函数采用以下参数
预订(字符串名称、字符串电子邮件、int-phonenum、LocalDate-fromDate、LocalDate-toDate)。

但是,我现在想检查在创建新预订时是否已经进行了预订。 我所有的对象都保存在一个
数组列表中
,但考虑到我构建日期的方式,我真的不知道该怎么做。任何针孔将不胜感激

编辑:

public List addBooking(int addBooking){//argument目前没有任何作用,我还没有决定应该选择什么。
如果(添加预订10)
抛出新的IllegalArgumentException(“预订数量必须大于0且不能超过10!”);
其他的
预订。添加(新预订(“Alex测试”)abrdwa@gmail.com“,99323223,LocalDate.now().plusDays(10),LocalDate.now().plusDays(15));
添加(新的预订(“CRIS测试2”acdef@gmail.com,47825433,LocalDate.now().plusDays(10),LocalDate.now().plusDays(15));
预订。添加(新预订(“Frank Test3”)abcde@gmail.com“,41722210,LocalDate.now().plusDays(10),LocalDate.now().plusDays(15));
添加(新的预订(“Elea Test4”)abcd@gmail.com“,99321312,LocalDate.now().plusDays(10),LocalDate.now().plusDays(15));
预订。添加(新预订(“Monica Test5”)abc@hotmail.com“,9992223,LocalDate.now().plusDays(10),LocalDate.now().plusDays(15));
返回预订;
}

首先,您必须考虑什么是相同的预订。所有字段都相同,包括确切日期?还是日期重叠?或者只是名字和电子邮件?根据这一点,覆盖保留中的equal方法。 然后您可以添加一张支票:

if(reservations.contains(newReservationAttempt){
  //do whatever you want, return a boolean inside a method or
  throw new ReservationAlreadyExistException()      
}

另一种可能是使用Java流和任何匹配项检查标准。

这里是我将采用的高级方法

  • Hotel
    类包含
    Reservations
    的数组列表,但您不能直接修改它
  • Hotel
    类有一个
    boolean addReservation(Reservation)
    方法,该方法接受
    Reservation
    并将其添加到数组中并返回true,如果它是“已作出的”,则返回false
  • 需要更清楚地界定“已经作出”一词。你是说同样的预订已经预订了吗?或者你的意思是你想检查它是否与其他保留冲突?如果是后者,则需要遍历现有的预订,并将开始日期和结束时间与每个预订进行比较
  • LocalDateRange
    我建议您将库添加到项目中。该库提供了添加到java 8及更高版本中内置的java.time功能的类。事实上,这个库和java.time都是由同一个人Stephen Colebourne领导的

    特别值得一提的是,这门课还额外提供了三十个名额。此类将时间跨度表示为一对
    LocalDate
    对象。该类提供了方便的比较方法,例如
    邻接
    重叠
    ,等等

    因此,您的
    Reservation
    类应该包含一个成员字段
    LocalDateRange
    ,用于开始和停止日期

    如果使用Java16或更高版本,我们可以将您的
    Reservation
    类更简短地编写为一个类。在记录中,编译器隐式创建构造函数、getter、
    equals
    &
    hashCode
    toString

    package work.basil.example.hotel;
    导入org.threeten.extra.LocalDateRange;
    公共记录保留(字符串customerName、字符串CustomerMail、int id、LocalDateRange ArriveDeep)
    {
    }
    
    编写一个搜索列表的方法,检查每个
    Reservation
    record对象所包含的
    LocalDateRange
    对象,并询问它是否与我们的目标日期范围重叠

    boolean-isDaterAngeTake(列表reservationList,LocalDateRange-dateRange)
    {
    布尔值=假;
    for(预订:预订列表)
    {
    if(reservation.arrivedefect().overlaps(dateRange)){return true;}
    }
    回程;
    }
    
    练习那个密码

    localdatetoday=LocalDate.now(美国/埃德蒙顿地区);
    列表<预订>预订列表=
    名单(
    新预订(“Alex测试”abrdwa@gmail.com“,99323223,LocalDateRange.of(today.plusDays(10),today.plusDays(13)),
    新预订(“Criss Test2”acdef@gmail.com,47825433,LocalDateRange.of(今天.星期四(10),今天.星期四(15)),
    新预订(“Frank Test3”abcde@gmail.com“,41722210,LocalDateRange.of(today.plusDays(10),today.plusDays(17)),
    新预订(“Elea Test4”abcd@gmail.com“,99321312,LocalDateRange.of(today.plusDays(10),today.plusDays(19)),
    新预订(“Monica Test5”abc@hotmail.com“,9992223,LocalDateRange.of(今天.星期四(10),今天.星期四(19)))
    );
    LocalDateRange near=LocalDateRange.of(today.plusDays(11),today.plusDays(13));
    布尔值IsNearDateRangeTake=this.IsDaterRangeTake(reservationList,near);
    System.out.println(near+)表示“+isneardaterangetake”;
    LocalDateRange far=LocalDateRange.of(today.plusDay(180),today.plusDay
    
    if(reservations.contains(newReservationAttempt){
      //do whatever you want, return a boolean inside a method or
      throw new ReservationAlreadyExistException()      
    }