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;
}