欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?多個時間區(qū)間進行合并處理方法

 更新時間:2024年02月01日 10:09:42   作者:kk_star  
用戶在選擇多個時間區(qū)間之后,如選擇的時間區(qū)間連續(xù)或者有重疊,需要對所選的時間區(qū)間進行合并,這其實是一個區(qū)間合并問題,下面通過本文給大家介紹Java?多個時間區(qū)間進行合并處理的解決方案,一起看看吧

需求:用戶在選擇多個時間區(qū)間之后,如選擇的時間區(qū)間連續(xù)或者有重疊,需要對所選的時間區(qū)間進行合并

這其實是一個區(qū)間合并問題,為了簡化操作,將拿到的集合進行排序后再合并

廢話不多說,源碼如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @ClassName DateU
 * @Description TODO
 * @Author kk_star
 * @Date 2021/4/9 14:59
 */
public class DateU {
    public static void main(String[] args) {
        List<DateEntity> list = new ArrayList<>();
        DateEntity de1 =  new DateEntity("2021-01-10","2021-02-15");
        DateEntity de2 =  new DateEntity("2021-01-01","2021-01-06");
        DateEntity de3 =  new DateEntity("2021-03-01","2021-03-15");
        DateEntity de4 =  new DateEntity("2021-01-07","2021-01-09");
        DateEntity de5 =  new DateEntity("2021-02-16","2021-02-28");
        list.add(de1);
        list.add(de2);
        list.add(de3);
        list.add(de4);
        list.add(de5);
        //list排序,方便合并操作
        sort(list);
        System.out.println("合并前:"+list.toString());
        List<DateEntity> resultList = handle(list);
        sort(resultList);
        System.out.println("合并后:"+resultList);
    }
    /*
     * @Description 獲取兩個時間之間相差的天數(shù)
     * @Author kk_star
     * @Date 2021/4/9 16:59
     * @param date1
     * @param date2
     * @return long
     */
    public static long getDiffDays(Date date1,Date date2){
        long t1 = date1.getTime();
        long t2 = date2.getTime();
        if(t1 == t2){
            return 0L;
        }else if(t1>t2){
            return (t1-t2)/(1000*60*60*24);
        }else{
            return (t2-t1)/(1000*60*60*24);
        }
    }
    /**
     * @Description 操作-從list尾部往前逐個合并
     * @Author kk_star
     * @Date 2021/4/9 17:00
     * @param list
     * @return java.util.List<DateEntity>
     */
    public static List<DateEntity> handle(List<DateEntity> list){
        List<DateEntity> resultList = new ArrayList<>();
        for (int i=1;;i++){
            if(list.size()<=1){
                if(list.size()==1){
                    resultList.add(list.get(0));
                }
                break;
            }
            DateEntity last = list.get(list.size()-1);
            DateEntity beLast = list.get(list.size()-2);
            DateEntity m = mergeTime(beLast,last);
            if(null != m){
                list.remove(last);
                list.remove(beLast);
                list.add(m);
            }else{
                resultList.add(last);
                list.remove(last);
            }
        }
        return resultList;
    }
    /**
     * @Description 兩個時間區(qū)間合并操作
     * @Author kk_star
     * @Date 2021/4/9 17:00
     * @param beLast
     * @param last
     * @return DateEntity
     */
    public static DateEntity mergeTime(DateEntity beLast,DateEntity last){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        DateEntity result = new DateEntity();
        try{
            Date d2 = sdf.parse(beLast.getEndTime());
            Date d3 = sdf.parse(last.getStartTime());
            Date d4 = sdf.parse(last.getEndTime());
            if(d2.getTime()>=d3.getTime()){
                result.setStartTime(beLast.getStartTime());
                if(d2.getTime()>=d4.getTime()){
                    result.setEndTime(beLast.getEndTime());
                }else{
                    result.setEndTime(last.getEndTime());
                }
                return result;
            }else{
                if(getDiffDays(d2,d3)<=1){
                    result.setStartTime(beLast.getStartTime());
                    result.setEndTime(last.getEndTime());
                    return result;
                }else{
                    return null;
                }
            }
        }catch (Exception e){
            System.err.println(e.getMessage());
        }
        return null;
    }
    /**
     * @Description list排序操作,根據(jù)時間區(qū)間起始值排序
     * @Author kk_star
     * @Date 2021/4/9 17:02
     * @param list
     * @return void
     */
    public static void sort(List<DateEntity> list){
        Collections.sort(list, new Comparator<DateEntity>() {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            @Override
            public int compare(DateEntity o1, DateEntity o2) {
                try {
                    if(sdf.parse(o1.getStartTime()).getTime()-sdf.parse(o2.getStartTime()).getTime()>=0){
                        return 1;
                    }else{
                        return -1;
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return 0;
            }
        });
    }
}
import lombok.Data;
/**
 * @ClassName DateEntity
 * @Description TODO
 * @Author kk_star
 * @Date 2021/4/9 15:15
 */
@Data
public class DateEntity {
    public String startTime;
    public String endTime;
    public DateEntity(String startTime, String endTime) {
        this.startTime = startTime;
        this.endTime = endTime;
    }
    public DateEntity() {
    }
}

到此這篇關(guān)于Java 多個時間區(qū)間進行合并處理的文章就介紹到這了,更多相關(guān)Java 多個時間區(qū)間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot使用validation進行自參數(shù)校驗的方法

    SpringBoot使用validation進行自參數(shù)校驗的方法

    在SpringBoot項目中,利用validation依賴可以通過注解方式校驗數(shù)據(jù)庫交互參數(shù),提高代碼可讀性和維護性,此方法避免了硬編碼校驗規(guī)則,方便后期規(guī)則變更,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 詳細(xì)聊聊RabbitMQ竟無法反序列化List問題

    詳細(xì)聊聊RabbitMQ竟無法反序列化List問題

    這篇文章主要給大家介紹了關(guān)于RabbitMQ竟無法反序列化List的相關(guān)資料,文中通過示例代碼將問題以及解決的過程介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • JavaWeb實現(xiàn)文件上傳與下載實例詳解

    JavaWeb實現(xiàn)文件上傳與下載實例詳解

    在Web應(yīng)用程序開發(fā)中,文件上傳與下載功能是非常常用的功能,下面通過本文給大家介紹JavaWeb實現(xiàn)文件上傳與下載實例詳解,對javaweb文件上傳下載相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • 詳解如何在Java中調(diào)用Python程序

    詳解如何在Java中調(diào)用Python程序

    今天給大家?guī)淼氖顷P(guān)于Java中調(diào)用Python程序的相關(guān)知識,文章有非常詳細(xì)的代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring?Boot項目中解決跨域問題的四種方式總結(jié)

    Spring?Boot項目中解決跨域問題的四種方式總結(jié)

    這篇文章主要介紹了瀏覽器同源策略限制導(dǎo)致的跨域問題,并詳細(xì)記錄了常見的跨域解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Springboot中動態(tài)語言groovy介紹

    Springboot中動態(tài)語言groovy介紹

    Apache的Groovy是Java平臺上設(shè)計的面向?qū)ο缶幊陶Z言,這門動態(tài)語言擁有類似Python、Ruby和Smalltalk中的一些特性,可以作為Java平臺的腳本語言使用,這篇文章主要介紹了springboot中如何使用groovy,需要的朋友可以參考下
    2022-09-09
  • Java使用GUI繪制線條的示例

    Java使用GUI繪制線條的示例

    這篇文章主要介紹了Java使用GUI繪制線條的示例,幫助大家更好的理解和學(xué)習(xí)java gui編程,感興趣的朋友可以了解下
    2020-09-09
  • 基于Java實現(xiàn)簡易的七星彩號碼生成器

    基于Java實現(xiàn)簡易的七星彩號碼生成器

    七星彩是中國體育彩票的一種玩法,由中國國家體育總局體育彩票管理中心統(tǒng)一發(fā)行。本文為大家準(zhǔn)備了一個七星彩號碼生成器Java工具類,感興趣的可以了解一下
    2022-08-08
  • springboot項目不輸出nohup.out日志的解決

    springboot項目不輸出nohup.out日志的解決

    這篇文章主要介紹了springboot項目不輸出nohup.out日志的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java如何基于poi操作Wold工具類

    Java如何基于poi操作Wold工具類

    這篇文章主要介紹了Java如何基于poi操作Wold工具類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論