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ù)據(jù)庫交互參數(shù),提高代碼可讀性和維護性,此方法避免了硬編碼校驗規(guī)則,方便后期規(guī)則變更,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-09-09Spring?Boot項目中解決跨域問題的四種方式總結(jié)
這篇文章主要介紹了瀏覽器同源策略限制導(dǎo)致的跨域問題,并詳細(xì)記錄了常見的跨域解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02