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中synchronized锁的升级过程

    java中synchronized锁的升级过程

    这篇文章主要介绍了java中synchronized锁的升级过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 重新实现hashCode()方法

    重新实现hashCode()方法

    hashCode()是Java中的一个重要方法,用于计算对象的哈希码。本文介绍了如何重新实现hashCode()方法,包括使用对象的属性计算哈希码、使用字符串拼接计算哈希码、使用随机数计算哈希码等方法。同时,还介绍了如何避免哈希冲突,提高哈希表的效率。
    2023-04-04
  • Spring Boot 2 实战:自定义启动运行逻辑实例详解

    Spring Boot 2 实战:自定义启动运行逻辑实例详解

    这篇文章主要介绍了Spring Boot 2 实战:自定义启动运行逻辑,结合实例形式详细分析了Spring Boot 2自定义启动运行逻辑详细操作技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • SpringBoot各种事务操作实战(自动回滚、手动回滚、部分回滚)

    SpringBoot各种事务操作实战(自动回滚、手动回滚、部分回滚)

    本文主要介绍了SpringBoot各种事务操作实战,包含自动回滚、手动回滚、部分回滚这三种,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Springboot整合多数据源配置流程详细讲解

    Springboot整合多数据源配置流程详细讲解

    这篇文章主要介绍了Springboot整合多数据源配置流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • RxJava2.x+ReTrofit2.x多线程下载文件的示例代码

    RxJava2.x+ReTrofit2.x多线程下载文件的示例代码

    本篇文章主要介绍了RxJava2.x+ReTrofit2.x多线程下载文件的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • Java String对象使用方法详解

    Java String对象使用方法详解

    这篇文章主要介绍了Java String对象使用方法详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • 详解Java中的数组与字符串相关知识

    详解Java中的数组与字符串相关知识

    这篇文章主要介绍了详解Java中的数组与字符串相关知识,包括操作字符串的一些基本方法列举,需要的朋友可以参考下
    2015-09-09
  • Java Robot应用示例之机器人功能

    Java Robot应用示例之机器人功能

    这篇文章主要为大家详细介绍了Java Robot应用示例之机器人功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Springboot与Maven多环境配置的解决方案

    Springboot与Maven多环境配置的解决方案

    多环境配置的解决方案有很多,我看到不少项目的多环境配置都是使用Maven来实现的,本文就实现Springboot与Maven多环境配置,感兴趣的可以了解下
    2021-06-06

最新评论