最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法

 更新時(shí)間:2024年07月08日 11:01:09   作者:笑小楓  
遇到了個(gè)問題,同一天可以輸入多個(gè)時(shí)間段,但是每個(gè)時(shí)間段的時(shí)間不能出現(xiàn)重疊,這不就是判斷數(shù)據(jù)返回是否有重疊的變種嗎,所以本文給大家介紹了Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法,需要的朋友可以參考下

為什么寫這么一篇文章呢?

遇到了個(gè)問題,同一天可以輸入多個(gè)時(shí)間段,但是每個(gè)時(shí)間段的時(shí)間不能出現(xiàn)重疊。

納尼,這不就是判斷數(shù)據(jù)返回是否有重疊的變種嘛~

簡(jiǎn)單,開搞

數(shù)字范圍是否重疊判斷

這里以int類型為例了,其它的也都類似

核心方法

    /**
     * @param start1 第一個(gè)數(shù)據(jù)開始時(shí)間
     * @param end1   第一個(gè)數(shù)據(jù)結(jié)束時(shí)間
     * @param start2 第二個(gè)數(shù)據(jù)開始時(shí)間
     * @param end2   第二個(gè)數(shù)據(jù)結(jié)束時(shí)間
     * @return true:發(fā)生重疊  false:未發(fā)生重疊
     */
    public static boolean isIntersect(int start1, int end1, int start2, int end2) {
        return Math.max(start1, start2) <= Math.min(end1, end2);
    }

4個(gè)參數(shù)start1-end1代表第一組范圍,start2-end2代表第二組范圍;

Math.max(start1, start2) <= Math.min(end1, end2)使用Math.max和Math.min可以無視第一組數(shù)據(jù)和第二組數(shù)據(jù)的順序,只比較是否重疊,<= 代表0-1后面不能是1-3,只能是2-3;如果想要1-3的效果把=去掉即可,后面會(huì)有演示。

核心方法非常簡(jiǎn)單,那我們?cè)煲唤M偽數(shù)據(jù)測(cè)試一下吧。

測(cè)試數(shù)據(jù)

先來一組錯(cuò)誤數(shù)據(jù)吧

[
  {"startNum": 0, "endNum": 100},
  {"startNum": 100, "endNum": 500},
  {"startNum": 400, "endNum": 1000},
  {"startNum": 1001, "endNum": 9999}
]

測(cè)試方法

    public static void main(String[] args) {
        String str = "[\n" +
                "  {\"startNum\": 0, \"endNum\": 100},\n" +
                "  {\"startNum\": 100, \"endNum\": 500},\n" +
                "  {\"startNum\": 500, \"endNum\": 1000},\n" +
                "  {\"startNum\": 1001, \"endNum\": 9999}\n" +
                "]";
        JSONArray array = JSON.parseArray(str);
        for (int i = 0; i < array.size(); i++) {
            for (int j = i + 1; j < array.size(); j++) {
                boolean isOk = isIntersect(
                        handleStr(array.getJSONObject(i).getString("startNum")),
                        handleStr(array.getJSONObject(i).getString("endNum")),
                        handleStr(array.getJSONObject(j).getString("startNum")),
                        handleStr(array.getJSONObject(j).getString("endNum")));
                if (isOk) {
                    System.out.println("no " + j + " and no " + (j + 1) + " is intersect");
                    System.out.println("or say, "
                            + array.getJSONObject(i).getString("startNum")
                            + " to " + array.getJSONObject(i).getString("endNum")
                            + " and " + array.getJSONObject(j).getString("startNum")
                            + " to " + array.getJSONObject(j).getString("endNum")
                            + " is intersect");

                    System.out.println("\n");
                }
            }
        }
    }

答案還是很清晰的哈~

數(shù)字范圍效果完成了。數(shù)值類的都類似哈

時(shí)間范圍是否重疊判斷

時(shí)間有很多種,我們一種一種的來說,實(shí)現(xiàn)都一樣,重要的是思想

首先來看一下下面這種格式,搞個(gè)錯(cuò)誤數(shù)據(jù)吧

  [
    {"startTime": "00:00", "endTime": "01:00"},
    {"startTime": "01:00", "endTime": "02:00"},
    {"startTime": "01:00", "endTime": "02:00"},
    {"startTime": "08:00", "endTime": "22:00"},
    {"startTime": "20:00", "endTime": "24:00"}
  ]

因?yàn)?code>01:00是重疊的,所以我們把上面核心方法的=去掉。如下

    /**
     * @param start1 第一個(gè)數(shù)據(jù)開始時(shí)間
     * @param end1   第一個(gè)數(shù)據(jù)結(jié)束時(shí)間
     * @param start2 第二個(gè)數(shù)據(jù)開始時(shí)間
     * @param end2   第二個(gè)數(shù)據(jù)結(jié)束時(shí)間
     * @return true:發(fā)生重疊  false:未發(fā)生重疊
     */
    public static boolean isIntersect(int start1, int end1, int start2, int end2) {
        return Math.max(start1, start2) < Math.min(end1, end2);
    }

接下來就很簡(jiǎn)單了,把時(shí)間處理成數(shù)據(jù)類型就可以了,下面看一下處理的方法

    public static int handleStr(String str) {
        str = str.replace(":", "");
        return Integer.parseInt(str);
    }

來一起看一下運(yùn)行結(jié)果吧

    public static void main(String[] args) {
        String data = "  [\n" +
                "    {\"startTime\": \"00:00\", \"endTime\": \"01:00\"},\n" +
                "    {\"startTime\": \"01:00\", \"endTime\": \"02:00\"},\n" +
                "    {\"startTime\": \"01:00\", \"endTime\": \"02:00\"},\n" +
                "    {\"startTime\": \"08:00\", \"endTime\": \"22:00\"},\n" +
                "    {\"startTime\": \"20:00\", \"endTime\": \"24:00\"}\n" +
                "  ]";
        JSONArray array = JSON.parseArray(data);
        for (int i = 0; i < array.size(); i++) {
            for (int j = i + 1; j < array.size(); j++) {
                boolean isOk = isIntersect(
                        handleStr(array.getJSONObject(i).getString("startTime")),
                        handleStr(array.getJSONObject(i).getString("endTime")),
                        handleStr(array.getJSONObject(j).getString("startTime")),
                        handleStr(array.getJSONObject(j).getString("endTime")));
                if (isOk) {
                    System.out.println("no " + j + " and no " + (j + 1) + " is intersect");
                    System.out.println("or say, "
                            + array.getJSONObject(i).getString("startTime")
                            + " to " + array.getJSONObject(i).getString("endTime")
                            + " and " + array.getJSONObject(j).getString("startTime")
                            + " to " + array.getJSONObject(j).getString("endTime")
                            + " is intersect");

                    System.out.println("\n");
                }
            }
        }
    }

對(duì)于時(shí)間類型,下面格式如何比較

  [
    {"startTime": "2024-07-04 00:00:00", "endTime": "2024-07-04 10:00:00"},
    {"startTime": "2024-07-04 10:00:00", "endTime": "2024-07-04 12:00:00"},
    {"startTime": "2024-07-04 12:00:00", "endTime": "2024-07-04 13:00:00"},
    {"startTime": "2024-07-04 12:00:00", "endTime": "2024-07-04 18:00:00"},
    {"startTime": "2024-07-04 17:00:00", "endTime": "2024-07-04 23:00:00"}
  ]

其實(shí)直接將時(shí)間轉(zhuǎn)為時(shí)間戳來比較就可以了,完整代碼如下:

    public static void main(String[] args) {
        String data = "[\n" +
                "    {\"startTime\": \"2024-07-04 00:00:00\", \"endTime\": \"2024-07-04 10:00:00\"},\n" +
                "    {\"startTime\": \"2024-07-04 10:00:00\", \"endTime\": \"2024-07-04 12:00:00\"},\n" +
                "    {\"startTime\": \"2024-07-04 12:00:00\", \"endTime\": \"2024-07-04 13:00:00\"},\n" +
                "    {\"startTime\": \"2024-07-04 12:00:00\", \"endTime\": \"2024-07-04 18:00:00\"},\n" +
                "    {\"startTime\": \"2024-07-04 17:00:00\", \"endTime\": \"2024-07-04 23:00:00\"}\n" +
                "  ]";
        JSONArray array = JSON.parseArray(data);
        for (int i = 0; i < array.size(); i++) {
            for (int j = i + 1; j < array.size(); j++) {
                boolean isOk = isIntersect(
                        handleDate(array.getJSONObject(i).getString("startTime")),
                        handleDate(array.getJSONObject(i).getString("endTime")),
                        handleDate(array.getJSONObject(j).getString("startTime")),
                        handleDate(array.getJSONObject(j).getString("endTime")));
                if (isOk) {
                    System.out.println("no " + j + " and no " + (j + 1) + " is intersect");
                    System.out.println("or say, "
                            + array.getJSONObject(i).getString("startTime")
                            + " to " + array.getJSONObject(i).getString("endTime")
                            + " and " + array.getJSONObject(j).getString("startTime")
                            + " to " + array.getJSONObject(j).getString("endTime")
                            + " is intersect");

                    System.out.println("\n");
                }
            }
        }
    }

    /**
     * @param start1 第一個(gè)數(shù)據(jù)開始時(shí)間
     * @param end1   第一個(gè)數(shù)據(jù)結(jié)束時(shí)間
     * @param start2 第二個(gè)數(shù)據(jù)開始時(shí)間
     * @param end2   第二個(gè)數(shù)據(jù)結(jié)束時(shí)間
     * @return true:發(fā)生重疊  false:未發(fā)生重疊
     */
    public static boolean isIntersect(long start1, long end1, long start2, long end2) {
        return Math.max(start1, start2) < Math.min(end1, end2);
    }

    @SneakyThrows
    public static long handleDate(String str) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return sdf.parse(str).getTime();
    }

看一下測(cè)試結(jié)果

總結(jié)

到此這篇關(guān)于Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法的文章就介紹到這了,更多相關(guān)Java判斷數(shù)據(jù)是否重疊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

太仆寺旗| 朔州市| 乐至县| 县级市| 嘉黎县| 阜南县| 阜南县| 阜城县| 巴南区| 常德市| 齐齐哈尔市| 财经| 绍兴市| 宣城市| 三河市| 五河县| 栾川县| 泰安市| 江西省| 讷河市| 东光县| 如皋市| 龙海市| 凤凰县| 金湖县| 谢通门县| 若尔盖县| 开封县| 盖州市| 浙江省| 云霄县| 济宁市| 贺兰县| 陆良县| 洪湖市| 湘乡市| 县级市| 青海省| 晋宁县| 师宗县| 江西省|