今天写代码的时候,想要得到某个部件下的所有子件的id组合,对应的model是PlanProdInfo,其实就是一个树,产品,部件,子件都在其中存着,parentId为其父件的id.起初代码是这样写的
/**
* @see 得到某部件下的所有子件id组合
*/
private void getAllChild(String partId, String allChild){
String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
List tempList=generalObjectService.findBySql(sql);
if (tempList != null && tempList.size() > 0) {
Long id = null ;
for(int i=0;i<tempList.size();i++){
id=(Long)tempList.get(i);
allChild+=id+"," ;
getAllChild(id.toString(),allChild);
}
}
}
allChild是对象,不是容器,最后还是为空,想后用集合list,修改下是这样:
/**
* @see 得到某部件下的所有子件id组合
*/
private void getAllChild(String partId, List temp){
String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
List tempList=generalObjectService.findBySql(sql);
if (tempList != null && tempList.size() > 0) {
Long id = null ;
String idStr = "" ;
for(int i=0;i<tempList.size();i++){
id=(Long)tempList.get(i);
if(temp != null && temp.size() > 0 && temp.get(0) != null){
idStr = (String) temp.get(0) ;
}
temp.clear();
temp.add(idStr) ;
getAllChild(id.toString(),temp);
}
}
}
但是在递归里面在判断list,感觉效率很低,所以,最后直接把所有的id存放在list中,然后循环list,重新组装id,代码如下:
/**
* @see 得到某部件下的所有子件id组合
* @param String partId, List temp
*/
private void getAllChild(String partId, List temp){
String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
List tempList=generalObjectService.findBySql(sql);
if (tempList != null && tempList.size() > 0) {
Long id = null ;
for(int i=0;i<tempList.size();i++){
id=(Long)tempList.get(i);
temp.add(id+",") ;
getAllChild(id.toString(),temp);
}
}
}
但是感觉这样效率也是很低,请各位指教啊!