我有一个这样的方法,我在 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
类有一个子成员列表,它总是被初始化为一个空列表。我在这里所做的是将成员的层次列表转换为平面列表。我理解那部分。我不明白递归在这里是如何工作的。
在递归中,它会在满足某些条件时终止。但在这里我没有给出任何有意终止的条件。那么这里的终止部分是如何工作的呢?
最佳答案
递归将在 memberList
为空时结束,因为在这种情况下将返回一个空的 List
。
即当 i.getChildren()
是一个空的 List
时,递归调用 convertToFlatList(i.getChildren())
将收到一个空的 List
,因此 Stream
管道不会进行另一个递归调用(因为它没有要在其上执行 flatMap
的元素),并且会返回一个空的 列表
。
关于java - 递归如何与 Java 8 Stream 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54017926/