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

Java如何將若干時間區(qū)間進行合并的方法步驟

 更新時間:2021年02月18日 15:01:56   作者:wizeky  
這篇文章主要介紹了Java如何將若干時間區(qū)間進行合并的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

問題原因

工作中突然有個場景,需要合并時間區(qū)間。將若干閉合時間區(qū)間合并,實現思路如下:

1、 先對日期區(qū)間進行按時間順序排序,這樣后一個區(qū)間(記為next)的from一定是不小于前一個(記為prev)from的。
2、在進行循環(huán)比較的時候,對于next區(qū)間,假設next.from大于prev.to就說明這兩個區(qū)間是分開的,要新增區(qū)間。否則說明next.from在[prev.from, prev.to]內,這時要看next.to是否是大于prev.to,如果大于就要合并區(qū)間。

具體實現

  public static List<PeriodDto> mergePeriod(List<PeriodDto> periodList) {
    List<PeriodDto> result = new ArrayList<PeriodDto>();

    if (periodList == null || periodList.size() < 1) {
      return result;
    }

    // 對區(qū)間進行排序
    Collections.sort(periodList, new Comparator<PeriodDto>() {
      @Override
      public int compare(PeriodDto o1, PeriodDto o2) {
        if ((o1.getFrom().getTime() - o2.getFrom().getTime()) > 0) {
          return 1;
        } else if ((o1.getFrom().getTime() - o2.getFrom().getTime()) == 0) {
          return 0;
        } else {
          return -1;
        }
      }
    });
    PeriodDto prev = null;
    for (PeriodDto item : periodList) {
      if (prev == null || prev.getTo().before(item.getFrom())) {
        result.add(item);
        prev = item;
      } else if (prev.getTo().before(item.getTo())) {
        prev.setTo(item.getTo());
      }
    }

    return result;
  }

寫個測試類驗證下:

 public static void main(String[] args) throws ParseException {

    PeriodDto date1 = new PeriodDto();
    date1.setFrom(DateUtils.fmtDate("2020-01-01 12:00:00"));
    date1.setTo(DateUtils.fmtDate("2021-01-01 12:00:00"));
    
    PeriodDto date2 = new PeriodDto();
    date2.setFrom(DateUtils.fmtDate("2019-05-01 12:00:00"));
    date2.setTo(DateUtils.fmtDate("2020-04-29 12:00:00"));
    
    PeriodDto date3 = new PeriodDto();
    date3.setFrom(DateUtils.fmtDate("2018-01-01 12:00:00"));
    date3.setTo(DateUtils.fmtDate("2019-01-01 12:00:00"));
    
    PeriodDto date4 = new PeriodDto();
    date4.setFrom(DateUtils.fmtDate("2012-01-01 12:00:00"));
    date4.setTo(DateUtils.fmtDate("2023-01-01 12:00:00"));
    
    List<PeriodDto> list = new ArrayList<PeriodDto>();
    list.add(date1);
    list.add(date2);
    list.add(date3);
    list.add(date4);
    
    List<PeriodDto> result = mergePeriod(list);
    
    System.out.println(JSONObject.toJSONStringWithDateFormat(result, JSONObject.DEFFAULT_DATE_FORMAT));
  }

運行結果:

[{"from":"2018-01-01 12:00:00","to":"2019-01-01 12:00:00"},{"from":"2019-05-01 12:00:00","to":"2021-01-01 12:00:00"},{"from":"2022-01-01 12:00:00","to":"2023-01-01 12:00:00"}]

OK,完美收工,解決問題。

PS:補充示例

給定 n 個區(qū)間 [li,ri],要求合并所有有交集的區(qū)間。

注意如果在端點處相交,也算有交集。

輸出合并完成后的區(qū)間個數。

例如:[1,3]和[2,6]可以合并為一個區(qū)間[1,6]。

輸入格式
第一行包含整數n。

接下來n行,每行包含兩個整數 l 和 r。

輸出格式
共一行,包含一個整數,表示合并區(qū)間完成后的區(qū)間個數。

數據范圍
1≤n≤100000,
−109≤li≤ri≤109
輸入樣例:
5
1 2
2 4
5 6
7 8
7 9
輸出樣例:
3

【代碼:】

import java.io.*;
import java.util.*;

public class Main {

  static List<int[]> f = new ArrayList<>();

  public static void main(String[] args) throws IOException{
    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
    int n = Integer.parseInt(read.readLine());
    for(int i = 1; i <= n; i++) {
      String[] str = read.readLine().split(" ");
      int[] t = {Integer.parseInt(str[0]),Integer.parseInt(str[1])};
      f.add(t);
    }
    f.sort(new Comparator<int[]>(){
      public int compare(int[] o1, int[] o2){
        return o1[0] - o2[0];
      }
    });
    int ed = Integer.MIN_VALUE, res = 0;
    for (int[] t : f) {
      if(t[0] > ed) res ++;
      ed = Math.max(ed, t[1]);
    }
    System.out.println(res);
  }
}

到此這篇關于Java如何將若干時間區(qū)間進行合并的方法步驟的文章就介紹到這了,更多相關Java 時間合并內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringCloud Zuul過濾器和谷歌Gauva實現限流

    SpringCloud Zuul過濾器和谷歌Gauva實現限流

    這篇文章主要介紹了SpringCloud Zuul過濾器和谷歌Gauva實現限流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • ibatis遷移到mybatis3的注意事項

    ibatis遷移到mybatis3的注意事項

    這篇文章主要介紹了ibatis遷移到mybatis3的注意事項的相關資料,需要的朋友可以參考下
    2017-10-10
  • mybatis-plus用insertBatchSomeColumn方法批量新增指定字段

    mybatis-plus用insertBatchSomeColumn方法批量新增指定字段

    mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了關于mybatis-plus用insertBatchSomeColumn方法批量新增指定字段的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Spring框架實現AOP添加日志記錄功能過程詳解

    Spring框架實現AOP添加日志記錄功能過程詳解

    這篇文章主要介紹了Spring框架實現AOP添加日志記錄功能過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 簡單講解Java的Future編程模式

    簡單講解Java的Future編程模式

    這篇文章主要介紹了Java的Future編程模式,包括對異步和并發(fā)的一些設計思維,需要的朋友可以參考下
    2015-11-11
  • 完美解決Server?returned?HTTP?response?code:403?for?URL報錯問題

    完美解決Server?returned?HTTP?response?code:403?for?URL報錯問題

    在調用某個接口的時候,突然就遇到了Server?returned?HTTP?response?code:?403?for?URL報錯這個報錯,導致獲取不到接口的數據,下面小編給大家分享解決Server?returned?HTTP?response?code:403?for?URL報錯問題,感興趣的朋友一起看看吧
    2023-03-03
  • Java中Cron表達式的生成解析及計算的工具類完整代碼

    Java中Cron表達式的生成解析及計算的工具類完整代碼

    這篇文章主要給大家介紹了關于Java中Cron表達式的生成解析及計算工具類的相關資料,Cron表達式是一個字符串,字符串空格分割,每一個域代表一個含義,一個cron表達式有至少6個,需要的朋友可以參考下
    2023-12-12
  • java中BigDecimal的使用踩坑記錄

    java中BigDecimal的使用踩坑記錄

    這篇文章主要為大家詳細介紹了java中使用BigDecimal會踩坑的地方以及相關的解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • java實現XML增加元素操作簡單示例

    java實現XML增加元素操作簡單示例

    這篇文章主要介紹了java實現XML增加元素操作,結合簡單實例形式分析了java針對xml格式數據的讀取、遍歷、創(chuàng)建等操作技巧,需要的朋友可以參考下
    2017-02-02
  • Java中Lombok @Value注解導致的variable not been initialized問題

    Java中Lombok @Value注解導致的variable not been initialized問題

    本文主要介紹了Java中Lombok @Value注解導致的variable not been initialized問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

龙里县| 义乌市| 桃源县| 涞源县| 新沂市| 富顺县| 夏邑县| 罗山县| 海宁市| 通海县| 额尔古纳市| 彭阳县| 富民县| 淳安县| 文水县| 云阳县| 德化县| 太保市| 兴安县| 桐城市| 江华| 万宁市| 卢氏县| 翼城县| 渝北区| 上高县| 乡城县| 德清县| 贵定县| 宿松县| 冷水江市| 建湖县| 防城港市| 营口市| 祁门县| 太保市| 乌兰察布市| 伊通| 满城县| 金溪县| 东明县|