[英]How does recursion work with Java 8 Stream?
我有一个这样的方法,我在流中使用递归:
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
类具有一个子成员列表,该子列表始终被初始化为一个空列表。 在这里,我正在将成员的层次结构列表转换为平面列表。 我了解那部分。 我不明白递归在这里是如何工作的。
作为递归,它会在满足某些条件时终止。 但是在这里,我没有任何故意终止的条件。 那么终端部分在这里如何工作?
当memberList
为空时,递归将结束,因为在这种情况下将返回一个空的List
。
例如,当i.getChildren()
是一个空List
,递归调用convertToFlatList(i.getChildren())
将收到一个空List
,因此Stream
管道不会再进行一次递归调用(因为它没有任何元素可以在上执行flatMap
),并返回一个空的List
。
之所以终止,是因为对于没有孩子的“叶子”,
Stream.concat(Stream.of(i), convertToFlatList(i.getChildren()).stream())
将在一个空列表上调用convertToFlatList
,并且在空流上应用flatMap()
不会调用该映射操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.