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;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章