Flask接口签名sign原理与实例代码浅析
293
2023-01-21
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
}
获取主评论列表,和递归全部子评论:
@Override
@Datasource(value="community")//切换数据源
public List
// TODO Auto-generated method stub
List
if(listMain.size()>=0){//如果主评论不为空
for (BsChannelPostReply bsChannelPostReply : listMain) {
bsChannelPostReply.setChildren(getMainReplyChildren(bsChannelPostReply.getReplyId()));//加载子评论
}
}
return listMain;
}
@Override
@Datasource(value="community")//切换数据源
public List
// 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和影响程序执行效率问题,需要谨慎使用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~