java的递归查询怎么写

java的递归查询怎么写,第1张

原文在这里,写得不错,楼主可参考下,具体链接如下,我只是搬运工!

>/ 

     说明方法描述:将list转为树tree结构 

      

     @param allRrecords 

     @return 

     @time 2016年5月10日 下午6:00:35 

     @author yangdong 

    /  

   public List<Record> useListRecordToTree(List<Record> allRrecords) {  

  

       List<Record> listParentRecord = new ArrayList<Record>();  

       List<Record> listNotParentRecord = new ArrayList<Record>();  

       // 第一步:遍历allRrecords保存所有数据的uuid用于判断是不是根节点  

       Map<String, String> mapAllUuid = new HashMap<String, String>();  

       Map<String, Record> allRecordMap = new HashMap<String, Record>();  

       for (Record record : allRrecords) {  

           mapAllUuidput(recordgetStr("uuid"), recordgetStr("uuid"));  

           allRecordMapput(recordgetStr("uuid"), record);  

       }  

       // 第二步:遍历allRrecords找出所有的根节点和非根节点  

       if (allRrecords != null && allRrecordssize() > 0) {  

           for (Record record : allRrecords) {  

               if (StringUtilisBlank(recordgetStr("parent_uuid"))  

                   || !mapAllUuidcontainsKey(recordgetStr("parent_uuid"))) {  

                   listParentRecordadd(record);  

               } else {  

                   listNotParentRecordadd(record);  

               }  

           }  

       }  

  

       // 第三步: 递归获取所有子节点  

       if (listParentRecordsize() > 0) {  

           for (Record record : listParentRecord) {  

               // 添加所有子级  

               recordset("childs", thisgetTreeChildRecord(listNotParentRecord, recordgetStr("uuid")));  

           }  

       }  

       return listParentRecord;  

   }  

  

   / 

     说明方法描述:使list转换为树并根据关键字和节点名称过滤 

      

     @param allRecords 所有节点 

     @param keywords 要过滤的关键字 

     @param filterFields 要过滤的字段 

     @return 

     @time 2016年5月19日 下午3:27:32 

     @author yangdong 

    /  

   public List<Record> useListRecordToTreeByKeywords(List<Record> allRecords, String keywords, String filterFields) {  

       List<Record> listRecord = new ArrayList<Record>();  

       Map<String, Record> allRecordMap = new HashMap<String, Record>();  

       for (Record record : allRecords) {  

           allRecordMapput(recordgetStr("uuid"), record);  

       }  

       // 遍历allRrecords找出所有的nodeName和关键字keywords相关的数据  

       if (allRecords != null && allRecordssize() > 0) {  

           if (filterFieldslength > 1) {  

               for (Record record : allRecords) {  

                   for (String field : filterFields) {  

                       // 比较  

                       if (recordgetStr(field)toLowerCase()indexOf(keywordstoLowerCase()) != -1) {  

                           listRecordadd(record);  

                       }  

                   }  

               }  

           } else {  

               for (Record record : allRecords) {  

                   // 比较  

                   if (recordgetStr(filterFields[0])toLowerCase()indexOf(keywordstoLowerCase()) != -1) {  

                       listRecordadd(record);  

                   }  

               }  

           }  

       }  

       // 查找过滤出来的节点和他们的父节点  

       listRecord = thisgetSelfAndTheirParentRecord(listRecord, new ArrayList<Record>(),  

                                                     new HashMap<String, Record>(), allRecordMap);  

       // 将过滤出来的数据变成树tree结构  

       listRecord = thisuseListRecordToTree(listRecord);  

       return listRecord;  

   }  

  

   / 

     说明方法描述:递归查询子节点 

      

     @param childList 子节点 

     @param parentUuid 父节点id 

     @return 

     @time 2016年5月10日 下午3:29:35 

     @author yangdong 

    /  

   private List<Record> getTreeChildRecord(List<Record> childList, String parentUuid) {  

       List<Record> listParentRecord = new ArrayList<Record>();  

       List<Record> listNotParentRecord = new ArrayList<Record>();  

       // 遍历tmpList,找出所有的根节点和非根节点  

       if (childList != null && childListsize() > 0) {  

           for (Record record : childList) {  

               // 对比找出父节点  

               if (StringUtilequals(recordgetStr("parent_uuid"), parentUuid)) {  

                   listParentRecordadd(record);  

               } else {  

                   listNotParentRecordadd(record);  

               }  

  

           }  

       }  

       // 查询子节点  

       if (listParentRecordsize() > 0) {  

           for (Record record : listParentRecord) {  

               // 递归查询子节点  

               recordset("childs", getTreeChildRecord(listNotParentRecord, recordgetStr("uuid")));  

           }  

       }  

       return listParentRecord;  

   }  

  

   / 

     说明方法描述:递归找出本节点和他们的父节点 

      

     @param parentList 根据关键字过滤出来的相关节点的父节点 

     @param resultList 返回的过滤出来的节点 

     @param filterRecordMap 已经过滤出来的节点 

     @param allRecordMap 所有节点 

     @return 

     @time 2016年5月19日 上午9:53:56 

     @author yangdong 

    /  

   private List<Record> getSelfAndTheirParentRecord(List<Record> parentList, List<Record> resultList,  

                                                    Map<String, Record> filterRecordMap,  

                                                    Map<String, Record> allRecordMap) {  

       // 当父节点为null或者节点数量为0时返回结果,退出递归  

       if (parentList == null || parentListsize() == 0) {  

           return resultList;  

       }  

       // 重新创建父节点集合  

       List<Record> listParentRecord = new ArrayList<Record>();  

       // 遍历已经过滤出来的节点  

       for (Record record : parentList) {  

  

           String uuid = recordgetStr("uuid");  

           String parent_uuid = recordgetStr("parent_uuid");  

  

           // 如果已经过滤出来的节点不存在则添加到list中  

           if (!filterRecordMapcontainsKey(uuid)) {  

               listParentRecordadd(record);// 添加到父节点中  

               filterRecordMapput(uuid, record);// 添加到已过滤的map中  

               allRecordMapremove(uuid);// 移除集合中相应的元素  

               resultListadd(record);// 添加到结果集中  

           }  

  

           // 找出本节点的父节点并添加到listParentRecord父节点集合中,并移除集合中相应的元素  

           if (StringUtilisNotBlank(parent_uuid)) {  

               Record parentRecord = allRecordMapget(parent_uuid);  

               if (parentRecord != null) {  

                   listParentRecordadd(parentRecord);  

                   allRecordMapremove(parent_uuid);  

               }  

           }  

  

       }  

       // 递归调用  

       getSelfAndTheirParentRecord(listParentRecord, resultList, filterRecordMap, allRecordMap);  

  

       return resultList;  

   }  

[java] view plain copy

//示例  

[java] view plain copy

      说明方法描述:递归查询所有权限 

       

      @param keyword 

      @param is_deleted 

      @return 

      @time 2016年5月10日 下午3:47:50 

      @author yangdong 

     /  

    public List<Record> getRecordByKeywordRecursive(String keyword, String is_deleted) {  

        // 第一步:查询所有的数据  

        StringBuffer sql = new StringBuffer(  

                                            " select pauuid,paparent_uuid,paauthor_code,paauthor_name,pais_menu,pasort_number,pais_enable,pamenu_icon ");  

        sqlappend("  from s_author pa");  

        List<Object> params = new ArrayList<Object>();  

        sqlappend(" where  pais_deleted= ");  

        paramsadd(is_deleted);  

        sqlappend(" order by pasort_number asc ");  

  

  

        List<Record> allRrecords = Dbuse(AppConstDB_DATASOURCE_MAIN)find(sqltoString(), ParamUtillistToArray(params));  

[java] view plain copy

            //第二步:将list变为树tree结构  

        if (StringUtilisNotBlank(keyword)) {  

            return superuseListRecordToTreeByKeywords(allRrecords, keyword, "author_name");  

        } else {  

            return superuseListRecordToTree(allRrecords);  

        }  

    }

用String 包下的indexOf()方法

代码如下:

public class Test {

public static void main(String[] args) {

String str="asdjavahnaskjavajdasjdasjjavafdlsafhdsaduhvcjavadsanclsajhdqlwijavadcwaduasjavadhua";

String strIndex = "java";

//StringindexOf()是String包下的方法,返回指定子字符串在此字符串中第一次出现处的索引。

//下面输出3

Systemoutprintln(strindexOf(strIndex));

Systemoutprintln("用递归方法找到java的个数是" + new Test()javaDiGui(str,strIndex) );

Systemoutprintln("用循环方法找到java的个数是" + new Test()javaXunHuan(str,strIndex) );

}

//str为要查找的长字符串,strIndex为短字符串从main传过过来的"java"

//这里采用递归方法

//方法是找到第一次出现的位置,总个数=1+余下子串中java个数

public int javaDiGui(String str,String strIndex){

int i=strindexOf(strIndex);

//i==-1则表示找不到

if(i == -1){

return 0;

}

else return 1+javaDiGui(strsubstring(i+strIndexlength()),strIndex);

//subString(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

}

//str为要查找的长字符串,strIndex为短字符串从main传过过来的"java"

//这里采用递归方法

//方法是找到第一次出现的位置,用余下子串代替当前字符串,再继续找,直到找不到为止

public int javaXunHuan(String str,String strIndex){

int i =0;

int num = 0; //总个数初始化为0

while(i!=-1){

i=strindexOf(strIndex);

if(i!=-1)

num++;

str = strsubstring(i+strIndexlength());//余下子串替换当前串

}

return num;

}

}

输出结果:

3

用递归方法找到java的个数是6

用循环方法找到java的个数是6

以上就是关于java的递归查询怎么写全部的内容,包括:java的递归查询怎么写、用java的递归方法或者循环方法找出里面有几个java ,各位大哥大姐帮帮忙、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9345400.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存