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

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

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

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

這其實是一個區(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)文章

最新評論

汉寿县| 阿克| 华宁县| 民勤县| 阜城县| 衡南县| 会理县| 威海市| 田东县| 乃东县| 沈丘县| 宜州市| 翁牛特旗| 沁源县| 柞水县| 定兴县| 锦屏县| 明溪县| 任丘市| 安仁县| 大洼县| 讷河市| 敦煌市| 锦屏县| 镶黄旗| 连平县| 泗水县| 鹤庆县| 容城县| 萍乡市| 大同县| 滕州市| 嵩明县| 神池县| 吉安县| 南溪县| 托克逊县| 吉林省| 瑞金市| 赫章县| 三原县|