判断集合中多个日期是否有重合的代码(亲测)

一、背景

1.因为项目中需要,需要写一个工具类来判断多个集合业务参数是否有重复的日期,经过反复的测试,觉着这个方法不错,希望能帮助大家。

二.思路

2.1.先对集合进行排序(因为是String类型,在这写了一个比较器,按照升序进行排序);

2.2.双重for循环,判断每一个;

三.代码

1.CompareDemo.java

public class CompareDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("2011-12-13 2011-12-20");
        list.add("2011-12-10 2011-12-12");
        list.add("2011-12-26 2011-12-30");
        list.add("2011-11-14 2012-2-25");
        list.add("2011-12-24 2011-12-18");
        Collections.sort(list, new mySortByValue());
        long startTime = System.currentTimeMillis();
        try {
            for (int i = 0; i < list.size(); i++) {
                String d1[] = list.get(i).split(" ");
                SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
                Date enddate1 = formater.parse(d1[1]);
                for (int j = i + 1; j < list.size(); j++) {
                    String d2[] = list.get(j).split(" ");
                    Date startdate2 = formater.parse(d2[0]);
                    if (!startdate2.after(enddate1)) {
                        System.out.println(list.get(i) + "与" + list.get(j) + "重合");
                    }
                    if (startdate2.after(enddate1)) {
                        System.out.println(list.get(i) + "与" + list.get(j) + "不重合");
                    }
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("程序执行时间:" + (endTime - startTime));
    }
}

2.比较器

public class mySortByValue implements Comparator {
    public int compare(Object o1, Object o2) {
        String s1 = (String) o1;
        String s2 = (String) o2;
        if (s1.compareToIgnoreCase(s2) < 0) {
            return -1;
        }
        return 1;
    }
}

3.结果

2011-11-14 2012-2-25与2011-12-10 2011-12-12重合
2011-11-14 2012-2-25与2011-12-13 2011-12-20重合
2011-11-14 2012-2-25与2011-12-24 2011-12-18重合
2011-11-14 2012-2-25与2011-12-26 2011-12-30重合
2011-12-10 2011-12-12与2011-12-13 2011-12-20不重合
2011-12-10 2011-12-12与2011-12-24 2011-12-18不重合
2011-12-10 2011-12-12与2011-12-26 2011-12-30不重合
2011-12-13 2011-12-20与2011-12-24 2011-12-18不重合
2011-12-13 2011-12-20与2011-12-26 2011-12-30不重合
2011-12-24 2011-12-18与2011-12-26 2011-12-30不重合

4.结束

Always keep the faith!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值