【问题标题】:List substraction in Java based on rangeJava中基于范围的列表减法
【发布时间】: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@ 课程供您使用,包括PeriodDurationIntervalLocalDateRange。照原样,您的问题过于模糊,无法完全为您提供帮助。

标签: java android arrays json


【解决方案1】:

这是一个区间算术任务。

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

Date interval sum and subtraction in Java

或者使用一些更具体的库,比如interval.sourceforge.net

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2021-05-15
    相关资源
    最近更新 更多