递归用例

private void createReplyTree(List<CommentReplyVo> commentReplyVoList, List<CommentReply> replyList) {
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(replyList)) {
List<CommentReply> leftReplyList = new LinkedList<CommentReply>();
leftReplyList.addAll(replyList);

for (CommentReply reply : replyList) {
CommentReplyVo replyVo = transform(reply);
if (reply.getParentReplyId() == null) {//parentReplyId为NULL,则表示是对评论的回复
commentReplyVoList.add(replyVo);
leftReplyList.remove(reply);
}
}

addReplyTreeNode(commentReplyVoList, leftReplyList);
}
}

private void sortReplyTree(List<CommentReplyVo> commentReplyVoList, List<CommentReply> replyList) {
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(replyList)) {
List<CommentReply> leftReplyList = new LinkedList<CommentReply>();
leftReplyList.addAll(replyList);

for (CommentReply reply : replyList) {
CommentReplyVo replyVo = transform(reply);
if (reply.getParentReplyId() == null) {//parentReplyId为NULL,则表示是对评论的回复
commentReplyVoList.add(replyVo);
leftReplyList.remove(reply);
}
}

addReplyTreeNode(commentReplyVoList, leftReplyList);
}
}

private void addReplyTreeNode(List<CommentReplyVo> replyVoList, List<CommentReply> replyList) {
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(replyVoList) && org.apache.commons.collections.CollectionUtils.isNotEmpty(replyList)) {

List<CommentReply> leftReplyNodeList = new LinkedList<CommentReply>();
leftReplyNodeList.addAll(replyList);

for (CommentReplyVo replyVo : replyVoList) {
for (CommentReply reply : replyList) {
if (reply.getParentReplyId() != null && reply.getParentReplyId().equals(replyVo.getId())) {
replyVo.getCommentReplyVos().add(transform(reply));
leftReplyNodeList.remove(reply);
}
}
}

for (CommentReplyVo replyVo : replyVoList) {
addReplyTreeNode(replyVo.getCommentReplyVos(), leftReplyNodeList);//递归调用
}
}
}
时间: 2024-07-29 18:29:30

递归用例的相关文章

perl 递归两例

Perl 作为一门文本处理语言,自然会有他的递归写法,小弟这边分享两个例子,希望对大家能有用! 阶乘(最经典的递归) #!/usr/bin/perl -s  my $Result = 1; sub GetResult{         my $num = shift;         if( $num != 1 ){                 $Result = $Result * $num;                 print "Result:$Result | num:$num

【转】消除左递归

转自:http://guanjy0129.blog.163.com/blog/static/111549445201061491810507/ 一个文法含有下列形式的产生式之一时: 1)A→Aβ,A∈VN,β∈V* 2)A→Bβ,B→Aα,A.B∈VN,α.β∈V* 则称该文法是左递归的. 然而,一个文法是左递归时,不能采取自顶向下分析法. 消除左递归方法有: a)把直接左递归改写为右递归: 设有文法产生式:A→Aβ|γ.其中β非空,γ不以A打头. 可写为:A→γA' A'→βA'|ε 一般情况

【Python之匿名函数及递归】

一.匿名函数及内置函数补充 1.语法 Python使用lambda关键字创造匿名函数.所谓匿名,意即不再使用def语句这样标准的形式定义一个函数. 语法: lambda [arg1[, arg2, ... argN]]: expression 例: 普通函数 def func(x,y): return x+y print(func) print(func(1,2)) 输出 <function func at 0x102b31f28> 3 等价的匿名函数 #匿名函数 f=lambda x,y:x

【Python 生成器 匿名函数 递归 模块及包的导入 正则re】

一.生成器 1.定义 生成器(generator)是一个特殊的迭代器,它的实现更简单优雅,yield是生成器实现__next__()方法的关键.它作为生成器执行的暂停恢复点,可以对yield表达式进行赋值,也可以将yield表达式的值返回. 也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态. yield的功能: 1.相当于为函数封装好__iter__和__next__ 2.return只能返回一次值,函数就终止了,而yield能返

【Python3之匿名函数及递归】

一.匿名函数及内置函数补充 1.语法 Python使用lambda关键字创造匿名函数.所谓匿名,意即不再使用def语句这样标准的形式定义一个函数. 语法: lambda [arg1[, arg2, ... argN]]: expression 例: 普通函数 def func(x,y): return x+y print(func) print(func(1,2)) 输出 <function func at 0x102b31f28> 3 等价的匿名函数 #匿名函数 f=lambda x,y:x

递归实现字符串反向排列

递归实现字符串反向排列决对不是一个好的方法,也不提倡这么去做.这里只是借助这个题深入的了解一下递归: 例:不使用库函数实现,递归实现字符串反向排列 #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char const *str) { assert(str); int len = 0; while (*str) { len++; str++; } return len; } cha

ybt1207 最大公约数问题 递归经典例题

ybt1207 最大公约数问题 递归典例 (选它只是因为太典型,不是因为懒得做难题故意放水) [题目描述] 给定两个正整数,求它们的最大公约数. [输入] 输入一行,包含两个正整数(<1,000,000,000). [输出] 输出一个正整数,即这两个正整数的最大公约数. [输入样例] 6 9 [输出样例] 3 [题解] 求最大公约数明明可以两个数同时试除所有小于等于它们的算术平方根的质数,然后把整除的数累乘,得到结果,但是这种算法不光写起来很麻烦,而且的复杂度是: \[ O(\sqrt{n})

初识linux文件管理

初识linux文件管理 1.文件系统与目录结构 文件系统从根目录 下开始,用"/". 以. 开头的文件为隐藏文件,路径分隔用/表示.文件系统的层级结构是LSB(linux standard base),遵循文件系统层级标准(FHS ) 文件命名规则:   文件名最长255个字节,包括路径名在内共4095个字节 蓝色–> 目录 绿色–> 可执行文件 红色–> 压缩文件 浅蓝色–> 链接文件 灰色–> 除了斜杠和NUL, 所有字符都有效,但不推荐使用特殊字符,

CentOS下解压缩命令

——————————————— .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 和 .tgz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz D