java利用递归调用实现树形菜单的样式
时间:2021-05-10 08:47:06|栏目: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和影响程序执行效率问题,需要谨慎使用。
总结


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




