版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011442682/article/details/79104529
/**
* @author Qi.Zhang
* 类说明:筛选集合中的元素,如果元素中某两个属性相同,则合并,但是他们的时间范围取并集
*/
public class Test2 {
public static void main(String[] args) throws Exception {
Advance adv1 = new Advance("WF0098","type1","2017-11-12 00:00:00","2018-11-22 23:59:59");
Advance adv2 = new Advance("WF0098","type1","2017-10-12 00:00:00","2018-11-22 23:59:59");
Advance adv3 = new Advance("WF0098","type1","2017-11-12 00:00:00","2018-12-22 23:59:59");
Advance adv4 = new Advance("WF0097","type2","2017-10-12 00:00:00","2018-12-22 23:59:59");
Advance adv5 = new Advance("WF0094","type2","2017-10-12 00:00:00","2018-12-22 23:59:59");
Advance adv6 = new Advance("WF0094","type2","2017-09-12 00:00:00","2018-12-22 23:59:59");
Advance adv7 = new Advance("WF0094","type2","2017-11-12 00:00:00","2018-12-22 23:59:59");
List<Advance> aList = new ArrayList<>();
aList.add(adv1);
aList.add(adv2);
aList.add(adv3);
aList.add(adv3);
aList.add(adv7);
aList.add(adv4);
aList.add(adv4);
aList.add(adv4);
aList.add(adv6);
aList.add(adv5);
aList.add(adv5);
aList.add(adv6);
aList.add(adv6);
//
TreeSet<Advance> tset = new TreeSet<Advance>(new Comparator<Advance>() {
@Override
public int compare(Advance o1, Advance o2) {
return (o1.getSiteId().compareTo(o2.getSiteId()) - (o1.getWtgType().compareTo(o2.getWtgType()));
}
});
tset.addAll(aList);
// for (Advance advance : tset) {
// System.out.println(advance);
// }
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//找出来有3组结果
List<Advance> list = new ArrayList<>();
for (Advance advance : tset) {
String startTimeOut = advance.getStartTime();
String endTimeOut = advance.getEndTime();
Advance newAdv = new Advance();
String startTime = startTimeOut;
String endTime = endTimeOut;
for (Advance advance1 : aList) {
String startTimeIn = advance1.getStartTime();
String endTimeIn = advance1.getEndTime();
//做比较
if ((advance.getSiteId()+advance.getWtgType()).equals(advance1.getSiteId()+advance1.getWtgType())) {
if (df.parse(startTimeOut).compareTo(df.parse(startTimeIn))==1) {
//说明里面的开始时间小,取里面的开始时间
startTime=startTimeIn;
}
if (df.parse(endTimeOut).compareTo(df.parse(endTimeIn))==-1) {
//说明外面的时间比里面的结束时间小,取里面的时间
endTime = endTimeIn;
}
}
}
newAdv.setSiteId(advance.getSiteId());
newAdv.setWtgType(advance.getWtgType());
newAdv.setStartTime(startTime);
newAdv.setEndTime(endTime);
list.add(newAdv);
}
for (Advance advance : list) {
System.out.println(advance);
}
}
}