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

/**
 * @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);
		}
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值