根据范围列出Java中的减法

时间:2017-12-02 15:48:24

标签: java android arrays json

我有一个用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。

关于提取可用插槽的好算法的任何想法

1 个答案:

答案 0 :(得分:0)

这是间隔算术任务。

您可以Ranges查看Guava libraries。 正如这篇文章所建议的那样:

Date interval sum and subtraction in Java

或使用更具体的库,例如interval.sourceforge.net