我有一个用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。
关于提取可用插槽的好算法的任何想法
答案 0 :(得分:0)
这是间隔算术任务。
您可以Ranges查看Guava libraries。 正如这篇文章所建议的那样:
Date interval sum and subtraction in Java
或使用更具体的库,例如interval.sourceforge.net