java利用遞歸調用實現(xiàn)樹形菜單的樣式
一:需求
現(xiàn)有以需求就是把某一個帖子的全部評論展示出來。
二:分析
關于對帖子的評論分為主評論和子評論,主評論就是對帖子的直接評論,子評論就是對評論的評論。
三:思路
先獲取某一個帖子的全部主評論,遞歸判斷是否有子評論,獲取子評論。
遞歸本質:程序調用自身的編程技巧叫做遞歸。
程序調用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調
用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過
程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。
四:編碼
實體類:
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;//回復的直接評論的replyId
private List<BsChannelPostReply> children;//下面的子評論
}
獲取主評論列表,和遞歸全部子評論:
@Override
@Datasource(value="community")//切換數據源
public List<BsChannelPostReply> getMainReply(int postId) {
// TODO Auto-generated method stub
List<BsChannelPostReply> listMain=dao.getMainReply(postId);//獲取主評論
if(listMain.size()>=0){//如果主評論不為空
for (BsChannelPostReply bsChannelPostReply : listMain) {
bsChannelPostReply.setChildren(getMainReplyChildren(bsChannelPostReply.getReplyId()));//加載子評論
}
}
return listMain;
}
@Override
@Datasource(value="community")//切換數據源
public List<BsChannelPostReply> getMainReplyChildren(long replyId) {
// TODO Auto-generated method stub
List<BsChannelPostReply> listChildren=dao.getMainReplyChildren(replyId);//根據當前的replayId獲取當前級子評論列表
if(listChildren.size()>=0){
for (BsChannelPostReply bsChannelPostReply : listChildren) {
bsChannelPostReply.setChildren(getMainReplyChildren(bsChannelPostReply.getReplyId()));//在判斷當前子評論是否還有子評論,遞歸調用,直到沒有子評論
}
}
return listChildren;
}
五:效果
根據這樣的遞歸調用就可以實現(xiàn)理論上的獲取無極限的子評論列表。
慎用Java遞歸調用
在java語言中,使用遞歸調用時,如果過多的調用容易造成java.lang.StackOverflowError即棧溢出和程序執(zhí)行過慢。這是一個潛在Bug和影響程序執(zhí)行效率問題,需要謹慎使用。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Java class文件格式之訪問標志信息_動力節(jié)點Java學院整理
access_flags 描述的是當前類(或者接口)的訪問修飾符, 如public, private等, 此外, 這里面還存在一個標志位, 標志當前的額這個class描述的是類, 還是接口2017-06-06
淺談Spring Cloud zuul http請求轉發(fā)原理
這篇文章主要介紹了淺談Spring Cloud zuul http請求轉發(fā)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
Spring很常用的@Conditional注解的使用場景和源碼解析
今天要分享的是Spring的注解@Conditional,@Conditional是一個條件注解,它的作用是判斷Bean是否滿足條件,本文詳細介紹了@Conditional注解的使用場景和源碼,需要的朋友可以參考一下2023-04-04

