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

}

}