Java?多個時間區(qū)間進(jìn)行合并處理方法
需求:用戶在選擇多個時間區(qū)間之后,如選擇的時間區(qū)間連續(xù)或者有重疊,需要對所選的時間區(qū)間進(jìn)行合并
這其實(shí)是一個區(qū)間合并問題,為了簡化操作,將拿到的集合進(jìn)行排序后再合并
廢話不多說,源碼如下:
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ū)間進(jìn)行合并處理的文章就介紹到這了,更多相關(guān)Java 多個時間區(qū)間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用validation進(jìn)行自參數(shù)校驗(yàn)的方法
在SpringBoot項(xiàng)目中,利用validation依賴可以通過注解方式校驗(yàn)數(shù)據(jù)庫交互參數(shù),提高代碼可讀性和維護(hù)性,此方法避免了硬編碼校驗(yàn)規(guī)則,方便后期規(guī)則變更,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-09-09JavaWeb實(shí)現(xiàn)文件上傳與下載實(shí)例詳解
在Web應(yīng)用程序開發(fā)中,文件上傳與下載功能是非常常用的功能,下面通過本文給大家介紹JavaWeb實(shí)現(xiàn)文件上傳與下載實(shí)例詳解,對javaweb文件上傳下載相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-02-02Spring?Boot項(xiàng)目中解決跨域問題的四種方式總結(jié)
這篇文章主要介紹了瀏覽器同源策略限制導(dǎo)致的跨域問題,并詳細(xì)記錄了常見的跨域解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02基于Java實(shí)現(xiàn)簡易的七星彩號碼生成器
七星彩是中國體育彩票的一種玩法,由中國國家體育總局體育彩票管理中心統(tǒng)一發(fā)行。本文為大家準(zhǔn)備了一個七星彩號碼生成器Java工具類,感興趣的可以了解一下2022-08-08springboot項(xiàng)目不輸出nohup.out日志的解決
這篇文章主要介紹了springboot項(xiàng)目不輸出nohup.out日志的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07