java对比集合

java对比集合

    private List<TreeRout> buildCompareRoutes(List<TreeRout> treeWflInfosPre, List<TreeRout> treeWflInfosPost) {
		List<TreeRout> newRoutePreList = new LinkedList<TreeRout>();
		Iterator<TreeRout> itPre = treeWflInfosPre.iterator();
		Iterator<TreeRout> itPost = treeWflInfosPost.iterator();
		TreeRout pre = itPre.hasNext() ? itPre.next() : null;
		TreeRout post = itPost.hasNext() ? itPost.next() : null;
		while(pre != null || post != null){
			boolean addPreFlag = true;
			boolean seqIsEqualsFlag = false;
			if(pre != null && post != null){
				int c = pre.getRouteSeq().compareTo(post.getRouteSeq());
				if( c == 0){
					seqIsEqualsFlag = true;
					checkRouteDiferent(pre, post);
					pre.setIsDifferent("isDifferent");
				}else if(c > 0 ){
					addPreFlag = false;
				}else{
					pre.setIsDifferent("isDifferent");
				}
			}else if(pre != null && post == null){
				pre.setIsDifferent("isDifferent");
			}else if(pre == null && post != null){
				addPreFlag = false;
			}
			if(addPreFlag){
				newRoutePreList.add(pre);
			}else{//添加空工序
				TreeRout emptyRoute = createEmptyRoute(post.getOperList().size());
				newRoutePreList.add(emptyRoute);
			}
			//序号相等时,当前pre、post都比较结束,则pre、post同时后移一位。
			//序号不等时,添加pre,则对应后移一位,补空,则post后移一位
			if(addPreFlag || seqIsEqualsFlag){
				pre = itPre.hasNext() ? itPre.next() : null;
			}
			if(!addPreFlag || seqIsEqualsFlag){
				post = itPost.hasNext() ? itPost.next() : null;
			}
		}
		return newRoutePreList;
	}

	private void checkRouteDiferent(TreeRout pre, TreeRout post) {
		if(!StringUtils.equals(pre.getRouteRrn(), post.getRouteRrn())){//工序不同
			pre.setIsDifferent("isDifferent");
			//post.setIsDifferent("isDifferent");
		}
		//比较工序下面工步
		pre.setOperList(buildCompareOperations(pre.getOperList(), post.getOperList()));
	}

	private TreeRout createEmptyRoute(int emptyOperSize) {
		TreeRout emptyRoute = new TreeRout();
		List<TreeOperation> emptyOperList = new LinkedList<TreeOperation>();
		for (int i = 0; i < emptyOperSize; i++) {
			TreeOperation emptyOper = new TreeOperation();
			emptyOper.setIsDifferent("isDifferent");
			emptyOperList.add(emptyOper);
		}
		emptyRoute.setOperList(emptyOperList);
		emptyRoute.setIsDifferent("isDifferent");
		return emptyRoute;
	}	
	
	/**比较工步是否相同,没有的补空位,返回operPreList与空位合并后的结果
	 * @param preOperList
	 * @param postOperList
	 * @return
	 */
	private List<TreeOperation> buildCompareOperations(List<TreeOperation> preOperList, List<TreeOperation> postOperList) {
		List<TreeOperation> newPreList = new LinkedList<TreeOperation>();
		Iterator<TreeOperation> itPre = preOperList.iterator();
		Iterator<TreeOperation> itPost = postOperList.iterator();
		TreeOperation pre = itPre.hasNext() ? itPre.next() : null;
		TreeOperation post = itPost.hasNext() ? itPost.next() : null;
		while(pre != null || post != null){
			boolean addPreFlag = true;
			boolean seqIsEqualsFlag = false;
			if(pre != null && post != null){
				int c = pre.getOperationSeq().compareTo(post.getOperationSeq());
				if( c == 0){
					seqIsEqualsFlag = true;
					checkDiferent(pre, post);
				}else if(c > 0 ){
					addPreFlag = false;
				}else{
					pre.setIsDifferent("isDifferent");
				}
			}else if(pre != null && post == null){
				pre.setIsDifferent("isDifferent");
			}else if(pre == null && post != null){
				addPreFlag = false;
			}
			if(addPreFlag){
				newPreList.add(pre);
			}else{
				TreeOperation emptyOper = new TreeOperation();
				emptyOper.setIsDifferent("isDifferent");
				newPreList.add(emptyOper);
			}
			//序号相等时,当前pre、post都比较结束,则pre、post同时后移一位。
			//序号不等时,添加pre,则对应后移一位,补空,则pre后移一位
			if(addPreFlag || seqIsEqualsFlag){
				pre = itPre.hasNext() ? itPre.next() : null;
			}
			if(!addPreFlag || seqIsEqualsFlag){
				post = itPost.hasNext() ? itPost.next() : null;
			}
		}
		return newPreList;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值