La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cómo escribir consultas recursivas en Java?

¿Cómo escribir consultas recursivas en Java?

El artículo original está aquí, está bien escrito, el cartel puede consultarlo, el enlace específico es el siguiente, ¡solo soy un portero!

/u 011627980/article/details/51454323

/**?

*?Descripción del método de descripción: ¿Convertir la lista en una estructura de árbol?

*

*?@param? ¿Todos los registros?

*?@¿Volver?

*?@Hora? 10 de mayo de 2016? 18:35

*?@Autor? ¿Yangdong?

*/

¿Público? lista<record>? useListRecordToTree(List<Records>?allRrecords)? {

¿Lista<Registro>? listParentRecord? =?Nuevo? ArrayList<Record>();

Lista<Record>? listNotParentRecord? =?Nuevo? ArrayList & ltrecord& gt();

//? Paso 1: recorra allRrecords y guarde el uuid de todos los datos, que se utiliza para determinar si es el nodo raíz.

Mapa<String,? cuerda y gt? mapAllUuid? =?Nuevo? HashMap<String,? String>();

Mapa<String,? grabar>? todoRecordMap? =?Nuevo? HashMap<String,? Record>();

¿Para qué? (¿grabar?¿grabar?:?todosRrecords)? {

mapalluuid . put(record . gettr(" uuid "),?record . gettr(" uuid "));

todos recordmap . "),? registro);

}

//?Paso 2: recorra todos los registros y busque todos los nodos raíz y no raíz.

¿Y si? (allRrecords?!=?null?& amp& amp?allRrecords.size()?& gt?0)?{

¿Para qué? (¿grabar?¿grabar?:?todosRrecords)? {

¿Y si? (string util . está en blanco(record . gettr(" parent _ uuid "))

||?! mapalluuid . contiene clave(record . gettr(" parent _ uuid "))?{

listParentRecord.add(record);

}? ¿En caso contrario {

listNotParentRecord.add(record);

}

}

}

//?Paso 3: Obtener recursivamente todos los nodos secundarios

If? (listParentRecord.size()?& gt ? 0) ?{

¿Para? (¿record? record?:?listParentRecord)? {

//?Agregar todos los niños

record.set( "childs", this . gettreechildrecord(listNotParentRecord, ?record . gettr(" uuid ")));

}

}

Devolver listParentRecord

p>

}

/**?

*? Descripción del método de descripción: ¿Convertir la lista en un árbol y filtrar según palabras clave y nombres de nodos?

*

¿Todos los registros?

¿Palabras clave para filtrar?

* ?@param?Campo para filtrar

*?@Hora? :27:32 pm /p>

*?@杨东?

*/

Public?list<Record>?uselisterecordtotreebykeywords(List<Record>?Todos los registros,? cadena? filterFields )? {

listRecord? =?ArrayList<Record>();

¿Qué?:?allRecords?

todo recordmap . put(record . gettr(" uuid "),? record);

}

//? Recorra allRrecords para encontrar todos los datos relacionados con el nombre del nodo y las palabras clave.

¿Y si? (allRecords?!=?null?& amp& amp?allRecords.size()?& gt?0)?{

¿Si? (filterFields.length?& gt?1)?{

¿Para qué? (¿Grabar? ¿Grabar?:?todos los registros)? {

¿Para qué? (¿Cadena? ¿Campo?:? ¿Campos de filtro)? {

//?Comparar

¿Y si? (record.getStr(campo).toLowerCase().

indexOf(palabras clave.toLowerCase())? ! =?-1)?{

listRecord.add(record);

}

}

}

}? ¿Y si? {

¿Para qué? (¿Grabar? ¿Grabar?:?todos los registros)? {

//?Comparar

¿Y si? (record.getStr(filterFields[0]).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{

listRecord.add(record);

}

}

}

}

//?Encuentre el nodo filtrado y su nodo principal

listaRegistro? =?this.getselfthantheirparentrecord(list record,?new?ArrayList<record>(),

new?HashMap<string,?record>(),?all recordmap

//?Convertir el mapa de registros filtrado); datos en una estructura de árbol.

listaRegistro? =?this . uselistrecordtotree(lista de registros);

¿Volver? listRecord

}

/**?

*? Descripción del método de descripción: ¿Consultar recursivamente nodos secundarios?

*

*?@param? ¿Lista de niños? ¿Nodo hijo?

*?@param? padreUuid? ¿Identificación del nodo principal?

*?@¿Volver?

*?@Hora? 10 de mayo de 2016? 15:29:35

*?@Autor? ¿Yangdong?

*/

¿Privado? lista<record>? getTreeChildRecord(Lista<Registro>? ¿Lista de hijos? ¿Cadena?parentUuid)? {

¿Lista<Registro>? listParentRecord? =?Nuevo? ArrayList<Record>();

Lista<Record>? listNotParentRecord? =?Nuevo? ArrayList & ltRecord& gt();

//?Recorra tmpList y encuentre todos los nodos raíz y no raíz.

¿Y si? (childList?!=?null?& amp& amp?childList.size()?& gt?0)?{

¿Para qué? (¿Registro? ¿Registro?:?childList)? {

//?Encuentre el nodo principal mediante comparación.

¿Y si? (string util . equals(record . gettr(" parent _ uuid "), ? parentUuid))? {

listParentRecord.add(record);

} ¿De lo contrario? {

listNotParentRecord.add(record);

}

}

}

//? Consulta Nodo hijo

¿Si? (listParentRecord.size()?& gt?0)?{

¿Para qué? (¿Registro? ¿Registro?:?listParentRecord)? {

//? Consulta recursivamente nodos secundarios

record.set("childs ", getTreeChildRecord(listNotParentRecord,?record . getstr(" uuid ")));

}

}

¿Volver? listParentRecord

}

/**?

*? Descripción del método de descripción: ¿Encontrar recursivamente este nodo y su nodo principal?

*

*?@param? lista de padres? ¿Nodo principal de nodos relacionados filtrados por palabra clave?

*?@param? ¿Lista de resultados? ¿Nodo de filtro devuelto?

*?@param? filtroRecordMap? ¿Nodos filtrados?

*?@param? todoRecordMap? ¿Todos los nodos?

*?@¿Volver?

*?@Hora? 19 de mayo de 2016? 09:53:56?

*?@Autor? ¿Yangdong?

*/

¿Privado? lista<record>? getselfthantheirparentrecord(List<record>?parentList,?list<record>?resultList,

map<string,?record>?filterRecordMap,

map <String,?record>?allRecordMap)? {

//?Cuando el nodo principal está vacío o el número de nodos es 0, devuelve el resultado y sale de la recursividad.

¿Y si? (parentList?==?null?||?parentList.size()?==?0)?{

¿Regresión? Lista de resultados;

}

//?Recrear la colección de nodos principales

List & ltRecord>? listParentRecord? =?Nuevo? ArrayList & ltRecord& gt();

//?Recorre los nodos filtrados.

¿Para qué? (¿Registro? ¿Registro?:?Lista de padres)? {

¿Cadena? ¿uuido? =?record . getstr(" uuid ");

Cadena? padre_uuid? =?record . getstr(" parent _ uuid ");

//?Si los nodos filtrados no existen, se agregarán a la lista.

¿Y si? (!filterrecordmap. contiene clave(uuid))? {

listParentRecord.add(record); //?Agregar al nodo principal

filterRecordMap.put(uuid, registro //?Agregar al mapa filtrado

<); p>allrecordmap . remove(uuid); // Elimina el elemento correspondiente de la colección.

resultList.add(record); //?Agregar al conjunto de resultados

}

//?Busque el nodo principal de este nodo y agréguelo. a listParentRecord colección de nodos principales y elimine el elemento correspondiente en la colección.

¿Y si? (cadena util. isnotblank(padre _ uuid))? {

¿Grabar? registro de padres? =?allrecordmap .get(parent_uuid);

¿Si? (¿parentRecord?!=?nulo)? {

listparentrecord . add(registro principal);

allrecordmap . p>

}

//? Llamada recursiva

getselfthantheirparentrecord(lista de registros principales,? lista de resultados,? filterRecordMap,? todos los mapas de registros);

¿devolver? Lista de resultados;

}

[java]? ¿Punto de vista? ¿aburrido? Copiar

//Ejemplo

[java]? ¿Punto de vista? ¿aburrido? Copiar

/**?

*?Descripción Método Descripción: ¿Consultar recursivamente todos los permisos?

*

*?@param? ¿Palabra clave?

*?@param? ¿Eliminado?

*?@¿Volver?

*?@Hora? 10 de mayo de 2016? 15:47:50

*?@Autor? ¿Yang Dong?

*/

¿Público? lista<record>? getrecordbykeyword recursivo(¿Cadena?palabra clave,?cadena?is_delete)? {

//?Paso uno: consulta todos los datos.

¿StringBuffer? SQL? =?Nuevo? String buffer(

"? ¿Seleccionar? 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_author?pa");

Lista<Object>? parámetros? =?Nuevo? ArrayList & ltObject & gt();

sql.append("?donde pa . está _ eliminado = ");

add(está _ eliminado

sql.append("?Orden?¿Por quién?pa.sort_number?asc?");

Lista<Record>? ¿Todos los registros? =?Db.use(AppConst.DB_DATASOURCE_MAIN). find(sql.toString(),? param util . listto array(params));

[java]? ¿Punto de vista? ¿aburrido? Copiar

//Paso 2: cambie la lista a una estructura de árbol.

¿Y si? (StringUtil.isNotBlank (palabra clave))? {

¿Volver? super .uselisterecordtotreebykeywords(todos los registros,palabras clave,?"Nombre del autor");

}?¿De lo contrario? {

¿Volver? super .uselistrecordtotree(todos los registros);

}

}