一:需求
現有以需求就是把某一個帖子的全部評論展示出來。
二:分析
關于對帖子的評論分為主評論和子評論,主評論就是對帖子的直接評論,子評論就是對評論的評論。
三:思路
先獲取某一個帖子的全部主評論,遞歸判斷是否有子評論,獲取子評論。
遞歸本質:程序調用自身的編程技巧叫做遞歸。
程序調用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調
用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過
程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。
四:編碼
實體類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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; //下面的子評論 } |
獲取主評論列表,和遞歸全部子評論:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@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; } |
五:效果
根據這樣的遞歸調用就可以實現理論上的獲取無極限的子評論列表。
慎用java遞歸調用
在java語言中,使用遞歸調用時,如果過多的調用容易造成java.lang.stackoverflowerror
即棧溢出和程序執行過慢。這是一個潛在bug和影響程序執行效率問題,需要謹慎使用。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://www.cnblogs.com/GH0522/p/9685646.html