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-09
Spring?Boot項目中解決跨域問題的四種方式總結(jié)
這篇文章主要介紹了瀏覽器同源策略限制導(dǎo)致的跨域問題,并詳細(xì)記錄了常見的跨域解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02

