How does recursion work with Java 8 Stream?(递归如何与 Java 8 Stream 一起工作?)
问题描述
我有一个这样的方法,我在 Streams 中使用递归:
I have a method like this where I'm using recursion with Streams:
private static List<Member> convertToFlatList(List<Member> memberList)
{
return memberList.stream().flatMap(i -> Stream.concat(Stream.of(i), convertToFlatList(i.getChildren()).stream())).collect(Collectors.toList());
}
假设一个 Member
类有一个子成员列表,它总是初始化为一个空列表.在这里,我正在做的是将成员的分层列表转换为平面列表.我理解那部分.我不明白的是这里的递归是如何工作的.
Lets say a Member
class has a children list of members that is always initialized to an empty list. Here what I'm doing is converting the hierarchical list of members to a flat list. I understand that part. What I don't understand is how recursion works here.
在递归中,它在满足某些条件时终止.但在这里我没有给出任何有意终止的条件.那么终止部分在这里是如何工作的呢?
In recursion, it's terminated when certain conditions are met. But here I'm not giving any condition for terminating intentionally. So how does the termination part work here?
推荐答案
当 memberList
为空时,递归将结束,因为在这种情况下,一个空的 List
将是返回.
The recursion will end when memberList
will be empty, since at this case an empty List
will be returned.
即当 i.getChildren()
为空 List
时,递归调用 convertToFlatList(i.getChildren())
将收到一个空 List
,因此 Stream
管道不会进行另一个递归调用(因为它没有要执行 flatMap
的元素),并且将返回一个空的 列表
.
i.e. when i.getChildren()
is an empty List
, the recursive call convertToFlatList(i.getChildren())
will receive an empty List
, so the Stream
pipeline won't make another recursive call (since it has no elements to execute flatMap
on), and will return an empty List
.
这篇关于递归如何与 Java 8 Stream 一起工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:递归如何与 Java 8 Stream 一起工作?
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01