java利用递归调用实现树形菜单的样式

 更新时间:2018年09月21日 14:41:46   作者:曾将  
这篇文章主要给大家介绍了关于java利用递归调用实现树形菜单样式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一:需求

现有以需求就是把某一个帖子的全部评论展示出来。

二:分析

关于对帖子的评论分为主评论和子评论,主评论就是对帖子的直接评论,子评论就是对评论的评论。

三:思路

先获取某一个帖子的全部主评论,递归判断是否有子评论,获取子评论。

递归本质:程序调用自身的编程技巧叫做递归。

程序调用自身的编程技巧称为递归( 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 并发编程之ForkJoin框架

    Java 并发编程之ForkJoin框架

    这篇文章主要为大家介绍了Java ForkJoin框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助
    2021-11-11
  • java后台实现支付宝对账功能的示例代码

    java后台实现支付宝对账功能的示例代码

    这篇文章主要介绍了java后台实现支付宝对账功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java class文件格式之访问标志信息_动力节点Java学院整理

    Java class文件格式之访问标志信息_动力节点Java学院整理

    access_flags 描述的是当前类(或者接口)的访问修饰符, 如public, private等, 此外, 这里面还存在一个标志位, 标志当前的额这个class描述的是类, 还是接口
    2017-06-06
  • 使用 Java 类 实现Http协议

    使用 Java 类 实现Http协议

    这篇文章主要介绍了用几个Java类简单的实现了Http协议相关资料,感兴趣的的朋友可以参考下面具体的文章内容
    2021-09-09
  • spring aop execution表达式的用法

    spring aop execution表达式的用法

    这篇文章主要介绍了spring aop execution表达式的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 从入门到精通:Java List遍历修改的完全指南

    从入门到精通:Java List遍历修改的完全指南

    在Java中,我们经常需要遍历List集合并对其中的元素进行修改,这可以通过使用迭代器或for循环来实现,需要的朋友可以参考下
    2023-10-10
  • Spring实战之缓存使用key操作示例

    Spring实战之缓存使用key操作示例

    这篇文章主要介绍了Spring实战之缓存使用key操作,结合实例形式分析了Spring缓存使用key具体配置、属性、领域模型等相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • 浅谈Spring Cloud zuul http请求转发原理

    浅谈Spring Cloud zuul http请求转发原理

    这篇文章主要介绍了浅谈Spring Cloud zuul http请求转发原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Jenkins如何实现自动打包部署linux

    Jenkins如何实现自动打包部署linux

    这篇文章主要介绍了Jenkins如何实现自动打包部署linux,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Spring很常用的@Conditional注解的使用场景和源码解析

    Spring很常用的@Conditional注解的使用场景和源码解析

    今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,本文详细介绍了@Conditional注解的使用场景和源码,需要的朋友可以参考一下
    2023-04-04

最新评论