java利用递归调用实现树形菜单的样式
2018-09-21 14:41
1356 查看
现有以需求就是把某一个帖子的全部评论展示出来。
二:分析
关于对帖子的评论分为主评论和子评论,主评论就是对帖子的直接评论,子评论就是对评论的评论。
三:思路
先获取某一个帖子的全部主评论,递归判断是否有子评论,获取子评论。
递归本质:程序调用自身的编程技巧叫做递归。
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调
用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过
程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
四:编码
实体类:
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; }
五:效果
根据这样的递归调用就可以实现理论上的获取无极限的子评论列表。
慎用Java递归调用
在java语言中,使用递归调用时,如果过多的调用容易造成
java.lang.StackOverflowError即栈溢出和程序执行过慢。这是一个潜在Bug和影响程序执行效率问题,需要谨慎使用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
相关文章推荐
- 关于递归调用,实现树形菜单的样式
- Java树形菜单 递归实现
- JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
- JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
- 利用函数递归调用实现汉诺塔
- TreeView控件递归实现树形菜单
- 树形目录的递归实现(一)数据库+jsp+javabean
- 利用JQuery实现网页左侧树形菜单(IE6测试通过)
- Java IO 用递归实现目录删除和树形目录展示 Java实现
- java中利用反射机制实现调用给定为字符串的方法名
- eclipse JNI示例。利用C/C++实现JAVA中调用的函数
- 新概念智能树形菜单--利用加权多叉树结合JavaScript树形控件实现
- java利用多线程实现异步调用
- 利用JQuery实现网页左侧树形菜单(IE6 IE7 Firefox测试通过)
- 树形目录的递归实现(一)数据库+jsp+javabean
- 树形目录的递归实现(一)数据库+jsp+javabean
- JAVA利用反射模式调用实现类
- java语言利用Socket实现对操作系统的命令调用和文件传输
- 树形目录的递归实现(一)数据库+jsp+javabean
- 利用WSDL2JAVA实现JAVA调用.Net的Web Services(1)