最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java利用遞歸調(diào)用實(shí)現(xiàn)樹(shù)形菜單的樣式

 更新時(shí)間:2018年09月21日 14:41:46   作者:曾將  
這篇文章主要給大家介紹了關(guān)于java利用遞歸調(diào)用實(shí)現(xiàn)樹(shù)形菜單樣式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一:需求

現(xiàn)有以需求就是把某一個(gè)帖子的全部評(píng)論展示出來(lái)。

二:分析

關(guān)于對(duì)帖子的評(píng)論分為主評(píng)論和子評(píng)論,主評(píng)論就是對(duì)帖子的直接評(píng)論,子評(píng)論就是對(duì)評(píng)論的評(píng)論。

三:思路

先獲取某一個(gè)帖子的全部主評(píng)論,遞歸判斷是否有子評(píng)論,獲取子評(píng)論。

遞歸本質(zhì):程序調(diào)用自身的編程技巧叫做遞歸。

程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用。 一個(gè)過(guò)程或函數(shù)在其定義或說(shuō)明中有直接或間接調(diào)

用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的規(guī)模較小的問(wèn)題來(lái)求解,遞歸策略只需少量的程序就可描述出解題過(guò)

程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語(yǔ)句來(lái)定義對(duì)象的無(wú)限集合。

四:編碼

實(shí)體類:

 import java.util.Date;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 
 import lombok.Data;
 @Data
 public class BsChannelPostReply {
 private long replyId;
 private String niceName;
 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 
 private Date replyDate;
 private String content;
 private long directRepliedId;//回復(fù)的直接評(píng)論的replyId
 private List<BsChannelPostReply> children;//下面的子評(píng)論
 }

獲取主評(píng)論列表,和遞歸全部子評(píng)論:

 @Override
 @Datasource(value="community")//切換數(shù)據(jù)源
 public List<BsChannelPostReply> getMainReply(int postId) {
  // TODO Auto-generated method stub
  List<BsChannelPostReply> listMain=dao.getMainReply(postId);//獲取主評(píng)論
  if(listMain.size()>=0){//如果主評(píng)論不為空
  for (BsChannelPostReply bsChannelPostReply : listMain) {
   bsChannelPostReply.setChildren(getMainReplyChildren(bsChannelPostReply.getReplyId()));//加載子評(píng)論
  }
  }
  return listMain;
 }
 
 @Override
 @Datasource(value="community")//切換數(shù)據(jù)源
 public List<BsChannelPostReply> getMainReplyChildren(long replyId) {
  // TODO Auto-generated method stub
  List<BsChannelPostReply> listChildren=dao.getMainReplyChildren(replyId);//根據(jù)當(dāng)前的replayId獲取當(dāng)前級(jí)子評(píng)論列表
  if(listChildren.size()>=0){
  for (BsChannelPostReply bsChannelPostReply : listChildren) {
   bsChannelPostReply.setChildren(getMainReplyChildren(bsChannelPostReply.getReplyId()));//在判斷當(dāng)前子評(píng)論是否還有子評(píng)論,遞歸調(diào)用,直到?jīng)]有子評(píng)論
  }
  }
  return listChildren;
 }

五:效果

根據(jù)這樣的遞歸調(diào)用就可以實(shí)現(xiàn)理論上的獲取無(wú)極限的子評(píng)論列表。

 

慎用Java遞歸調(diào)用

 在java語(yǔ)言中,使用遞歸調(diào)用時(shí),如果過(guò)多的調(diào)用容易造成java.lang.StackOverflowError即棧溢出和程序執(zhí)行過(guò)慢。這是一個(gè)潛在Bug和影響程序執(zhí)行效率問(wèn)題,需要謹(jǐn)慎使用。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

兰州市| 阆中市| 涡阳县| 和田市| 新巴尔虎右旗| 黑水县| 栾城县| 永春县| 巩义市| 满城县| 岳阳市| 乌鲁木齐县| 清远市| 华宁县| 湘阴县| 阜阳市| 农安县| 平凉市| 揭阳市| 疏附县| 内丘县| 长寿区| 温州市| 西青区| 托克逊县| 绥芬河市| 马边| 汉源县| 恩施市| 大冶市| 渝北区| 黄浦区| 仁布县| 丹江口市| 吉林省| 大渡口区| 保定市| 麻江县| 历史| 安徽省| 织金县|