写的数据结构1对多再对多的形式结构


    public List<AllInfoInPackage> queryClassAndMethodInfoByPackage3(String appName,String packageName1) {
        AlpacaCodeRelationExample example = new AlpacaCodeRelationExample();
        example.createCriteria().andAppNameEqualTo(appName).andPackageNameEqualTo(packageName1).andIsDeletedEqualTo("n").andIsHiddenEqualTo("n");
        List<AlpacaCodeRelation> acrList = alpacaCodeRelationDAO.selectByExample(example);
        if(ListUtils.isBlank(acrList)) {
            return null;
        }
        List<AllInfoInPackage> topClassList = new ArrayList<AllInfoInPackage>();
        for(AlpacaCodeRelation acr : acrList) {
            String className = acr.getClassName();
            String methodName = acr.getMethodName();
            Long classDetailId = acr.getClassDetailsId();
            Long methodDetailId = acr.getMethodDetailsId();
            Long dataId = acr.getId();
            if(topClassList.size()==0) {
                if(classDetailId==null||classDetailId<=0) {
                    classDetailId = insertInitClassOrMethodDetail();//首先在detail表中插入一条class数据,返回插入的id号
                }
                if(methodDetailId==null||methodDetailId<=0) {
                    methodDetailId = insertInitClassOrMethodDetail();
                }
                acr.setClassDetailsId(classDetailId);
                acr.setMethodDetailsId(methodDetailId);
                if(acr.getClassDetailsId()==null||acr.getMethodDetailsId()==null)
                    updateClassOrMethodId(dataId,classDetailId,methodDetailId);
                addNewMethodData(acr, topClassList);//最终返回数据插入初值
            } else {
                boolean isClassNameExist = false;
                for(AllInfoInPackage allInfoInPackage:topClassList) {
                    List<MethodInfoDto> methodLists;
                    MethodInfoDto newMethodInfoDto = new MethodInfoDto();
                    if(className.equals(allInfoInPackage.getClassName())) {
                        Long publicClassId = allInfoInPackage.getClassDetailId();
                        methodLists = allInfoInPackage.getMethodInfos();
                        newMethodInfoDto.setMethodName(methodName);
                        if(methodDetailId==null||methodDetailId<=0) {
                            methodDetailId = insertInitClassOrMethodDetail();
                            updateClassOrMethodId(dataId,publicClassId,methodDetailId);
                        }
                        newMethodInfoDto.setMethodDetailId(methodDetailId);
                        newMethodInfoDto.setMethodAttr(this.queryMethodOrClassDescriptionById(methodDetailId).getAttribute());//设置属性
                        methodLists.add(newMethodInfoDto);
                        isClassNameExist = true;
                        break;
                    }
                }
                if(!isClassNameExist) {
                    if(classDetailId==null||classDetailId<=0) {
                        classDetailId = insertInitClassOrMethodDetail();//首先在detail表中插入一条class数据,返回插入的id号
                    }
                    if(methodDetailId==null||methodDetailId<=0) {
                        methodDetailId = insertInitClassOrMethodDetail();
                    }
                    acr.setClassDetailsId(classDetailId);
                    acr.setMethodDetailsId(methodDetailId);
                    if(acr.getClassDetailsId()==null||acr.getMethodDetailsId()==null)
                        updateClassOrMethodId(dataId,classDetailId,methodDetailId);
                    addNewMethodData(acr, topClassList);//最终返回数据插入初值
                }
            }

        }
        return topClassList;
    }
private void addNewMethodData(AlpacaCodeRelation acr, List<AllInfoInPackage> topClassList) {
        String className = acr.getClassName();
        String methodName = acr.getMethodName();
        Long classDetailId = acr.getClassDetailsId();
        Long methodDetailId = acr.getMethodDetailsId();
        AllInfoInPackage allInfoInPackage = new AllInfoInPackage();
        allInfoInPackage.setClassName(className);
        allInfoInPackage.setClassDetailId(classDetailId);
        allInfoInPackage.setClassDesc(this.queryMethodOrClassDescriptionById(classDetailId).getDescription());//加入类描述信息
        MethodInfoDto methodInfoDto = new MethodInfoDto();
        methodInfoDto.setMethodName(methodName);
        methodInfoDto.setMethodDetailId(methodDetailId);
        methodInfoDto.setMethodAttr(this.queryMethodOrClassDescriptionById(methodDetailId).getAttribute());
        List<MethodInfoDto> methodInfos = new ArrayList<MethodInfoDto>();
        methodInfos.add(methodInfoDto);
        allInfoInPackage.setMethodInfos(methodInfos);
        topClassList.add(allInfoInPackage);
    }

    private Long insertInitClassOrMethodDetail() {
        AlpacaCodeRelationDetails acrd = new AlpacaCodeRelationDetails();
        acrd.setGmtCreate(new Date());
        acrd.setGmtModified(new Date());
        acrd.setIsDeleted("n");
        Long detailId = alpacaCodeRelationDetailsDAO.insert(acrd);
        return detailId;
    }

    //通过id来更新相应表中的classDetailId或者methodDetailId字段
    private int updateClassOrMethodId(Long id,Long classDetailId,Long methodDetailId) {
        AlpacaCodeRelation record = new AlpacaCodeRelation();
        record.setId(id);
        record.setGmtModified(new Date());
        record.setClassDetailsId(classDetailId);
        record.setMethodDetailsId(methodDetailId);
        int row = alpacaCodeRelationDAO.updateByPrimaryKeySelective(record);
        return row;
    }
    






测试代码部分:

(1)

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class ListTest {
	public static void main(String[] args) {
		List<List<String>> maa = new ArrayList<List<String>>();
		List<AlpacaCodeRelation> acrList = new ArrayList<AlpacaCodeRelation>();
		for(int i=0;i<6;i++) {
			AlpacaCodeRelation acr = new AlpacaCodeRelation();
			
			if(i==1||i==4) {
				acr.setClassName("lxp0");
			} else 
				acr.setClassName("lxp"+i);
			
			acr.setMethodName("lxpm"+i);
			acr.setPackageName("lxpp"+i);
			acrList.add(acr);
		}
		
		List<AllInfoInPackage> topClassList = new ArrayList<AllInfoInPackage>();
        for(AlpacaCodeRelation acr : acrList) {
            String packageName = acr.getPackageName();
            String className = acr.getClassName();
            String methodName = acr.getMethodName();
            if(topClassList==null||topClassList.size()==0) {
 /*           	AllInfoInPackage allInfoInPackage = new AllInfoInPackage();
            	allInfoInPackage.setClassName(className);
            	MethodInfoDto methodInfoDto = new MethodInfoDto();
            	methodInfoDto.setMethodName(methodName);
                List<MethodInfoDto> methodInfos = new ArrayList<MethodInfoDto>();
                methodInfos.add(methodInfoDto);
                allInfoInPackage.setMethodInfos(methodInfos);
                topClassList.add(allInfoInPackage);
                System.out.println("haha:"+topClassList.toString());*/
            	addNewMethodData(acr, topClassList);
            } else {
                boolean isClassNameExist = false;              
                for(AllInfoInPackage allInfoInPackage:topClassList) {
                	List<MethodInfoDto> methodLists = new ArrayList<MethodInfoDto>();
                	MethodInfoDto newMethodInfoDto = new MethodInfoDto();
                    if(className.equals(allInfoInPackage.getClassName())) {
                        methodLists = allInfoInPackage.getMethodInfos();
                        newMethodInfoDto.setMethodName(methodName);
                        methodLists.add(newMethodInfoDto);
//                        System.out.println("topClassList:"+topClassList.toString());
                        isClassNameExist = true;
                        break;
                    } 
                }
                if(!isClassNameExist) {
/*                	List<MethodInfoDto> methodLists = new ArrayList<MethodInfoDto>();
                	AllInfoInPackage allInfoInPackage = new AllInfoInPackage();
                	allInfoInPackage.setClassName(className);
                	MethodInfoDto methodInfoDto = new MethodInfoDto();
                	methodInfoDto.setMethodName(methodName);
                    methodLists.add(methodInfoDto);
                    allInfoInPackage.setMethodInfos(methodLists);
                    topClassList.add(allInfoInPackage);*/
                	addNewMethodData(acr,topClassList);
                    System.out.println("topClassList2:"+topClassList.toString());
                }
            }
            
        }
	}
	private void testtest() {
		String sql = "{'topic':'haha','priority':'p1','url':'http://sss'}";
		JSON json = JSONObject.parseObject(sql);
	}
	
	private static void addNewMethodData(AlpacaCodeRelation acr,List<AllInfoInPackage> topClassList) {
		String className = acr.getClassName();
		String methodName = acr.getMethodName();
		AllInfoInPackage allInfoInPackage = new AllInfoInPackage();
    	allInfoInPackage.setClassName(className);
    	MethodInfoDto methodInfoDto = new MethodInfoDto();
    	methodInfoDto.setMethodName(methodName);
        List<MethodInfoDto> methodInfos = new ArrayList<MethodInfoDto>();
        methodInfos.add(methodInfoDto);
        allInfoInPackage.setMethodInfos(methodInfos);
        topClassList.add(allInfoInPackage);
	}
}
(2)

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

public class CopyOfListTest {
	public static void main(String[] args) {
		CopyOfListTest ll = new CopyOfListTest();
		/**
		 * 测试数据
		 * 1、全部都不同,也就是6个包名,6个class名,6个method名
		 * 2、有2个包名相同,但是类名和方法名不同的:p1==p2=1,
		 * 3、有2个包名相同,类名也相同,但是2个方法不同
		 * 4、有2个包名相同,类名相同,方法相同
		 */
		ll.test(3);
	}
	
	private void test(int k) {
		List<List<String>> maa = new ArrayList<List<String>>();
		List<AlpacaCodeRelation> acrList = new ArrayList<AlpacaCodeRelation>();
		
		if(k==1) {
			for(int i=0;i<6;i++) {
				AlpacaCodeRelation acr = new AlpacaCodeRelation();			
				acr.setPackageName("p"+i);
				acr.setClassName("c"+i);		
				acr.setMethodName("m"+i);
				acrList.add(acr);
			}
		} else if(k==2) {
			for(int i=0;i<6;i++) {
				AlpacaCodeRelation acr = new AlpacaCodeRelation();
				if(i==1||i==3) {
					acr.setPackageName("p1");
					acr.setClassName("c"+i);		
					acr.setMethodName("m"+i);
				} 
				else {
					acr.setPackageName("p"+i);
					acr.setClassName("c"+i);		
					acr.setMethodName("m"+i);
				}			
				acrList.add(acr);
			}
		} else if(k==3) {

			for(int i=0;i<6;i++) {
				AlpacaCodeRelation acr = new AlpacaCodeRelation();
				if(i==1||i==3) {
					acr.setPackageName("p1");
					acr.setClassName("c"+i);		
					acr.setMethodName("m"+i);
				} else if (i==2||i==4) {
					acr.setPackageName("p2");
					acr.setClassName("c2");		
					acr.setMethodName("m"+i);
				}
				else {
					acr.setPackageName("p"+i);
					acr.setClassName("c"+i);		
					acr.setMethodName("m"+i);
				}			
				acrList.add(acr);
			}
		} else {
			for(int i=0;i<6;i++) {
				AlpacaCodeRelation acr = new AlpacaCodeRelation();
				if(i==1||i==3) {
					acr.setPackageName("p1");
					acr.setClassName("c"+i);		
					acr.setMethodName("m"+i);
				} else if (i==2||i==4) {
					acr.setPackageName("p2");
					acr.setClassName("c2");		
					acr.setMethodName("m2");
				} 
				else {
					acr.setPackageName("p"+i);
					acr.setClassName("c"+i);		
					acr.setMethodName("m"+i);
				}			
				acrList.add(acr);
			}
		}
		
		List<ReturnClassInfoDto> topClassList = new ArrayList<ReturnClassInfoDto>();
		
		for(AlpacaCodeRelation acr : acrList) {
            String packageName = acr.getPackageName();
            String className = acr.getClassName();
            String methodName = acr.getMethodName();
            if(topClassList==null||topClassList.size()==0) {
                ReturnClassInfoDto returnClassInfoDto = new ReturnClassInfoDto();
                returnClassInfoDto.setClassName(className);
                returnClassInfoDto.setPackageName(packageName);
                List<String> methodLists = new ArrayList<String>();
                methodLists.add(methodName);
                returnClassInfoDto.setMethodNames(methodLists);
                topClassList.add(returnClassInfoDto);
                System.out.println("haha:"+topClassList.toString());
            } else {
                boolean isClassNameExist = false;              
                for(ReturnClassInfoDto returnClassInfoDto:topClassList) {
                	List<String> methodLists = new ArrayList<String>();
                    if(className.equals(returnClassInfoDto.getClassName())&&packageName.equals(returnClassInfoDto.getPackageName())) {
                        methodLists = returnClassInfoDto.getMethodNames();
                        methodLists.add(methodName);
                        returnClassInfoDto.setMethodNames(methodLists);                       
                        System.out.println(returnClassInfoDto.toString());
                        System.out.println("topClassList:"+topClassList.toString());
                        isClassNameExist = true;
                        break;
                    } 
                }
                if(!isClassNameExist) {
                	List<String> methodLists = new ArrayList<String>();
                	ReturnClassInfoDto returnClassInfoDto = new ReturnClassInfoDto();
                    returnClassInfoDto.setClassName(className);
                    returnClassInfoDto.setPackageName(packageName);
                    methodLists.add(methodName);
                    returnClassInfoDto.setMethodNames(methodLists);
                    topClassList.add(returnClassInfoDto);
                    System.out.println("topClassList2:"+topClassList.toString());
                }
            }
		}
		List<ReturnPackageInfoDto> haha = changeToPackageListInfo(topClassList);
		String json = JSONObject.toJSONString(haha);
		System.out.println("haha"+k+":"+json);
	}
	
	private List<ReturnPackageInfoDto> changeToPackageListInfo(List<ReturnClassInfoDto> returnClassInfoList) {
		List<ReturnPackageInfoDto> topPackageList = new ArrayList<ReturnPackageInfoDto>();
		for(ReturnClassInfoDto returnClassInfoDto:returnClassInfoList) {
			String packageName = returnClassInfoDto.getPackageName();
			if(topPackageList==null||topPackageList.size()==0) {
				List<ReturnClassInfoDto> dataStore = new ArrayList<ReturnClassInfoDto>();
				ReturnPackageInfoDto infoDto = new ReturnPackageInfoDto();
				dataStore.add(returnClassInfoDto);
				infoDto.setPackageName(packageName);
				infoDto.setClassInfos(dataStore);
				topPackageList.add(infoDto);
			} else {
				boolean isPackageNameExist = false;    
				for(ReturnPackageInfoDto returnPackageInfoDto:topPackageList) {
					List<ReturnClassInfoDto> middleProcess = new ArrayList<ReturnClassInfoDto>();
					if(packageName.equals(returnPackageInfoDto.getPackageName())) {
						middleProcess = returnPackageInfoDto.getClassInfos();
						middleProcess.add(returnClassInfoDto);
						isPackageNameExist = true;
						break;
					}
				}
				
				if(!isPackageNameExist) {
					List<ReturnClassInfoDto> middleProcess = new ArrayList<ReturnClassInfoDto>();
					ReturnPackageInfoDto returnPackageInfoDto = new ReturnPackageInfoDto();
					middleProcess.add(returnClassInfoDto);
					returnPackageInfoDto.setPackageName(packageName);
					returnPackageInfoDto.setClassInfos(middleProcess);
					topPackageList.add(returnPackageInfoDto);
                }
				
			}
		}
		return topPackageList;
	}
}
(3)
package test;

import java.util.Date;

public class AlpacaCodeRelation {
    private Long id;

    private Date gmtCreate;

    private Date gmtModified;

    private Integer crid;

    private String moduleName;

    private String job;

    private String methodName;

    private String methodDesc;

    private String className;

    private String packageName;

    private Integer env;

    private String appName;

    private Long methodDetailsId;

    private Long classDetailsId;

    private String isHidden;

    private String isDeleted;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getGmtCreate() {
        return gmtCreate;
    }

    public void setGmtCreate(Date gmtCreate) {
        this.gmtCreate = gmtCreate;
    }

    public Date getGmtModified() {
        return gmtModified;
    }

    public void setGmtModified(Date gmtModified) {
        this.gmtModified = gmtModified;
    }

    public Integer getCrid() {
        return crid;
    }

    public void setCrid(Integer crid) {
        this.crid = crid;
    }

    public String getModuleName() {
        return moduleName;
    }

    public void setModuleName(String moduleName) {
        this.moduleName = moduleName == null ? null : moduleName.trim();
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job == null ? null : job.trim();
    }

    public String getMethodName() {
        return methodName;
    }

    public void setMethodName(String methodName) {
        this.methodName = methodName == null ? null : methodName.trim();
    }

    public String getMethodDesc() {
        return methodDesc;
    }

    public void setMethodDesc(String methodDesc) {
        this.methodDesc = methodDesc == null ? null : methodDesc.trim();
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className == null ? null : className.trim();
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName == null ? null : packageName.trim();
    }

    public Integer getEnv() {
        return env;
    }

    public void setEnv(Integer env) {
        this.env = env;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName == null ? null : appName.trim();
    }

    public Long getMethodDetailsId() {
        return methodDetailsId;
    }

    public void setMethodDetailsId(Long methodDetailsId) {
        this.methodDetailsId = methodDetailsId;
    }

    public Long getClassDetailsId() {
        return classDetailsId;
    }

    public void setClassDetailsId(Long classDetailsId) {
        this.classDetailsId = classDetailsId;
    }

    public String getIsHidden() {
        return isHidden;
    }

    public void setIsHidden(String isHidden) {
        this.isHidden = isHidden == null ? null : isHidden.trim();
    }

    public String getIsDeleted() {
        return isDeleted;
    }

    public void setIsDeleted(String isDeleted) {
        this.isDeleted = isDeleted == null ? null : isDeleted.trim();
    }
}

(4)

package test;

import java.util.List;

/**
 * Created by zouping.lxp on 2016/1/20.
 */
public class AllInfoInPackage {
	private Long classDetailId;
	private String className;
    private String classDesc;
    private String classAttr;
    private List<MethodInfoDto> methodInfos;
	public Long getClassDetailId() {
		return classDetailId;
	}
	public void setClassDetailId(Long classDetailId) {
		this.classDetailId = classDetailId;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public String getClassDesc() {
		return classDesc;
	}
	public void setClassDesc(String classDesc) {
		this.classDesc = classDesc;
	}
	public String getClassAttr() {
		return classAttr;
	}
	public void setClassAttr(String classAttr) {
		this.classAttr = classAttr;
	}
	public List<MethodInfoDto> getMethodInfos() {
		return methodInfos;
	}
	public void setMethodInfos(List<MethodInfoDto> methodInfos) {
		this.methodInfos = methodInfos;
	}
	@Override
	public String toString() {
		return "{classDetailId=" + classDetailId
				+ ", className=" + className + ", classDesc=" + classDesc
				+ ", classAttr=" + classAttr + ", methodInfos=" + methodInfos
				+ "}";
	}
}

数据结构示意图





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值