java合并时间段去重

Posted gsls200808

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java合并时间段去重相关的知识,希望对你有一定的参考价值。

合并时间段去重

先做排序,后判断时间交叉,合并时间段去重

代码如下

/**
     * 合并去重时间段
     *
     * @return
     */
    public static List<Map<String, Date>> getTimePeriodListDumplictcatePeriod(List<Map<String, Date>> periodList) 
        List<Map<String, Date>> result = new ArrayList<>();
        //列表不能为空
        if (periodList == null) 
            return null;
        
        //对数据排序,开始时间从小到大
        Collections.sort(periodList, new Comparator<Map<String, Date>>() 
            @Override
            public int compare(Map<String, Date> u1, Map<String, Date> u2) 
                long diff = u1.get("startDate").getTime() - u2.get("startDate").getTime();
                if (diff > 0) 
                    return 1;
                 else if (diff < 0) 
                    return -1;
                
                return 0; //相等为0
            

        );

        for (int i = 0; i < periodList.size() - 1; i++) 
            int j = i + 1;
            //判断 i的Endtime 与j 的Begintime 是否有交叉,有交叉,更新 j的Begintime 为i的Begintime, 并移除i
            if (periodList.get(i).get("endDate").after(periodList.get(i).get("startDate"))) 
                periodList.get(j).put("startDate", periodList.get(i).get("startDate"));
                periodList.remove(i);
                i--;
            
        

        result = periodList;
        return result;
    

以上是关于java合并时间段去重的主要内容,如果未能解决你的问题,请参考以下文章

java代码怎么将取到的值去重后合并显示,中间用分号隔开

java 怎么把多个list 合并成一个去掉重复的

java list集合合并问题

代码模板实现双向链表的去重拼接合并排序

java 怎么把多个list 合并成一个去掉重复的

Java把多个list 合并成一个并去重