一、背景
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!!!