【发布时间】:2017-12-02 15:48:23
【问题描述】:
我有一个用 Java 编写的应用程序,可以在一天内找到可用的预订时段。我有一个 json 文件,其中包含已预订的插槽列表和预订的打开/关闭时间。
例如(假设下面的数字作为示例给出),
{
"bookingopen" : 112,
"bookingclose" : 213,
"list_of_booking" : {
"start" : "114",
"end" : "119"
},
{
"start" : "136",
"end" : "180",
},
{
"start" : "140",
"end" : "156"
}
}
}
我想得到的是剩下的位置:
(112..114), (119..136) and (180..213)
我尝试过使用
IntStream 但它不起作用。
我还写了一套if条件:
for(int i = 1; i < mListOfBooking.size()-1; i++){
if(mListOfBooking.get(i-1).getArriveTime() > venue.getOpenTime() && (i-1 == 0)) {
mNewList.add(new Person(0, "No visitors", venue.getOpenTime(), mListOfBooking.get(i - 1).getArriveTime()));
} else if (mListOfBooking.get(i-1).getLeaveTime() < mListOfBooking.get(i).getArriveTime()){
mNewList.add(new Person(0, "No visitors", mListOfBooking.get(i-1).getLeaveTime(), mListOfBooking.get(i).getArriveTime()));
} else if((i == mListOfBooking.size()-1) && (mListOfBooking.get(i).getLeaveTime() < venue.getCloseTime())){
mNewList.add(new Person(0, "No visitors", mListOfBooking.get(i).getLeaveTime(), venue.getCloseTime()));
}
mNewList.add(new Person(mListOfBooking.get(i - 1).getId(),
mListOfBooking.get(i - 1).getArriveTime(),
mListOfBooking.get(i - 1).getLeaveTime()));
}
getclose、getopen、getLeaveTime、getArrive 方法是从 JSON 中提取信息的公正方法
这个逻辑不好,可能不够“聪明”,因为它漏掉了一些情况,在任何边缘情况下我都不能有 if。
关于提取可用插槽的好算法的任何想法
【问题讨论】:
-
您在处理日期和时间吗?如果是这样,请务必注意,因为有用于处理日期时间值的特定库。
-
@BasilBourque 它是时间戳,这意味着只需将其视为“长”。我在另一个库中处理人类可读的状态。
-
好吧,如果您不将其视为“Long”,而是将其视为日期时间对象,您将拥有java.time 和@ 987654322@ 课程供您使用,包括
Period、Duration、Interval和LocalDateRange。照原样,您的问题过于模糊,无法完全为您提供帮助。