java的递归查询怎么写?
/u 011627980/article/details/51454323
/**?
*?描述方法描述:将列表转换成树形结构?
*
*?@param?allRrecords?
*?@回归?
*?@时间?2016五月10?下午6点35分。
*?@作者?阳东?
*/
公共?列表& lt记录& gt?useListRecordToTree(List & lt;记录& gt?allRrecords)?{
列表& lt记录& gt?listParentRecord?=?新的?ArrayList & lt记录& gt();
列表& lt记录& gt?listNotParentRecord?=?新的?ArrayList & lt记录& gt();
//?第一步:遍历allRrecords,保存所有数据的uuid,用于判断是否是根节点。
地图& lt字符串,?字符串& gt?mapAllUuid?=?新的?HashMap & lt字符串,?字符串& gt();
地图& lt字符串,?记录& gt?allRecordMap?=?新的?HashMap & lt字符串,?记录& gt();
为了什么?(记录?记录?:?allRrecords)?{
mapalluuid . put(record . getstr(" uuid "),?record . getstr(" uuid "));
all recordmap . put(record . getstr(" uuid "),?记录);
}
//?步骤2:遍历allRrecords,找到所有根节点和非根节点。
如果?(allRrecords?!=?null?& amp& amp?allRrecords.size()?& gt?0)?{
为了什么?(记录?记录?:?allRrecords)?{
如果?(string util . is blank(record . getstr(" parent _ uuid "))
||?!mapalluuid . contains key(record . getstr(" parent _ uuid "))?{
listParentRecord.add(记录);
}?不然呢?{
listNotParentRecord.add(记录);
}
}
}
//?第三步:?递归获取所有子节点
如果?(listParentRecord.size()?& gt?0)?{
为了什么?(记录?记录?:?listParentRecord)?{
//?添加所有孩子
record.set("childs ",this . gettreechildrecord(listNotParentRecord,?record . getstr(" uuid ")));
}
}
回归?listParentRecord
}
/**?
*?描述方法描述:将列表转换成树,根据关键字和节点名进行过滤?
*
*?@param?所有记录?所有节点?
*?@param?关键词?要过滤的关键词?
*?@param?过滤字段?要筛选的字段?
*?@回归?
*?@时间?2016五月19?下午3点27分32秒。
*?@作者?阳东?
*/
公共?列表& lt记录& gt?uselisterecordtotreebykeywords(List & lt;记录& gt?所有记录,?字符串?关键词,?线...?filterFields)?{
列表& lt记录& gt?listRecord?=?新的?ArrayList & lt记录& gt();
地图& lt字符串,?记录& gt?allRecordMap?=?新的?HashMap & lt弦,?记录& gt();
为了什么?(记录?记录?:?allRecords)?{
all recordmap . put(record . getstr(" uuid "),?记录);
}
//?遍历allRrecords,找出所有与nodeName和关键字相关的数据。
如果?(allRecords?!=?null?& amp& amp?allRecords.size()?& gt?0)?{
如果?(filterFields.length?& gt?1)?{
为了什么?(记录?记录?:?allRecords)?{
为了什么?(字符串?场?:?filterFields)?{
//?比较
如果?(record.getStr(field)。toLowerCase()。indexOf(keywords.toLowerCase())?!=?-1)?{
listRecord.add(记录);
}
}
}
}?不然呢?{
为了什么?(记录?记录?:?allRecords)?{
//?比较
如果?(record.getStr(filterFields[0])。toLowerCase()。indexOf(keywords.toLowerCase())?!=?-1)?{
listRecord.add(记录);
}
}
}
}
//?查找过滤的节点及其父节点
listRecord?=?this . getselfthantheirparentrecord(list record,?新的?ArrayList & lt记录& gt(),
新的?HashMap & lt字符串,?记录& gt(),?all recordmap);
//?将过滤后的数据转换成树形结构。
listRecord?=?this . uselistrecordtotree(list record);
回归?listRecord
}
/**?
*?描述方法描述:递归查询子节点?
*
*?@param?儿童名单?子节点?
*?@param?parentUuid?父节点id?
*?@回归?
*?@时间?2016五月10?下午3点29分35秒。
*?@作者?阳东?
*/
私人?列表& lt记录& gt?getTreeChildRecord(List & lt;记录& gt?儿童名单?字符串?parentUuid)?{
列表& lt记录& gt?listParentRecord?=?新的?ArrayList & lt记录& gt();
列表& lt记录& gt?listNotParentRecord?=?新的?ArrayList & lt记录& gt();
//?遍历tmpList,找到所有的根节点和非根节点。
如果?(childList?!=?null?& amp& amp?childList.size()?& gt?0)?{
为了什么?(记录?记录?:?childList)?{
//?通过比较找到父节点。
如果?(string util . equals(record . getstr(" parent _ uuid "),?parentUuid))?{
listParentRecord.add(记录);
}?不然呢?{
listNotParentRecord.add(记录);
}
}
}
//?查询子节点
如果?(listParentRecord.size()?& gt?0)?{
为了什么?(记录?记录?:?listParentRecord)?{
//?递归查询子节点
record.set("childs ",getTreeChildRecord(listNotParentRecord,?record . getstr(" uuid ")));
}
}
回归?listParentRecord
}
/**?
*?描述方法描述:递归找出这个节点及其父节点?
*
*?@param?parentList?按关键字过滤的相关节点的父节点?
*?@param?结果列表?返回的筛选节点?
*?@param?filterRecordMap?被过滤掉的节点?
*?@param?allRecordMap?所有节点?
*?@回归?
*?@时间?2016五月19?上午9点53分56秒?
*?@作者?阳东?
*/
私人?列表& lt记录& gt?getselfthantheirparentrecord(List & lt;记录& gt?parentList,?列表& lt记录& gt?结果列表,
地图& lt弦,?记录& gt?filterRecordMap,
地图& lt字符串,?记录& gt?allRecordMap)?{
//?当父节点为空或节点数为0时,返回结果并退出递归。
如果?(parentList?==?null?||?parentList.size()?==?0)?{
回归?结果列表;
}
//?重新创建父节点集合
列表& lt记录& gt?listParentRecord?=?新的?ArrayList & lt记录& gt();
//?遍历过滤后的节点。
为了什么?(记录?记录?:?parentList)?{
字符串?uuid?=?record . getstr(" uuid ");
字符串?parent_uuid?=?record . getstr(" parent _ uuid ");
//?如果筛选的节点不存在,它们将被添加到列表中。
如果?(!filterrecordmap . contains key(uuid))?{
listParentRecord.add(记录);//?添加到父节点
filterRecordMap.put(uuid,记录);//?添加到过滤后的地图
allrecordmap . remove(uuid);//?从集合中移除相应的元素。
resultList.add(记录);//?添加到结果集
}
//?找到此节点的父节点并将其添加到listParentRecord的父节点集合中,并移除集合中相应的元素。
如果?(string util . isnotblank(parent _ uuid))?{
记录?parentRecord?=?allrecordmap . get(parent _ uuid);
如果?(parentRecord?!=?null)?{
listparentrecord . add(parent record);
allrecordmap . remove(parent _ uuid);
}
}
}
//?递归调用
getselfthantheirparentrecord(list parent record,?结果列表,?filterRecordMap,?all recordmap);
回归?结果列表;
}
【java】?观点?平淡?复制
//示例
【java】?观点?平淡?复制
/**?
*?描述方法描述:递归查询所有权限?
*
*?@param?关键词?
*?@param?被_删除了?
*?@回归?
*?@时间?2016五月10?下午三点四十七分五十分。
*?@作者?阳东?
*/
公共?列表& lt记录& gt?getrecordbykeyword recursive(String?关键词,?字符串?是_删除)?{
//?第一步:查询所有数据。
StringBuffer?sql?=?新的?字符串缓冲器(
"?选择?pa.uuid,pa.parent_uuid,pa.author_code,pa.author_name,pa.is_menu,pa.sort_number,pa.is_enable,pa.menu_icon?”);
sql.append("from?s _作者?pa”);
列表& ltObject & gt?params?=?新的?ArrayList & ltObject & gt();
sql.append("?where pa . is _ deleted = ");
params . add(is _ deleted);
sql.append("?订单?被谁?pa.sort_number?asc?”);
列表& lt记录& gt?allRrecords?=?Db.use(AppConst。DB_DATASOURCE_MAIN)。find(sql.toString(),?param util . listto array(params));
【java】?观点?平淡?复制
//第二步:把列表改成树形结构。
如果?(StringUtil.isNotBlank(关键字))?{
回归?super . uselisterecordtotreebykeywords(all records,关键词,?"作者姓名");
}?不然呢?{
回归?super . uselistrecordtotree(all records);
}
}