筛选集合中的元素,按条件去重,并合并

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/u011442682/article/details/79104529