java - 递归如何与 Java 8 Stream 一起工作?

标签 java recursion java-8 java-stream

我有一个这样的方法,我在 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/

相关文章:

recursion - 理解Prolog中的递归规则

Spring Rest Controller 使用 Jackson 处理 java.util.Optional

java - 没有 wsdl 的 xml rpc 客户端 java

java - 设置 Actor 监听 LibGDX 中的按钮点击

java - JVM字节码中的NOP是干什么用的?

javascript - 创建递归表单元素

java - 如何为每个超链接指定不同的操作

recursion - 递归函数是否可重入

java - 使用 Java 8 或 Spring data JPA 避免重复数据库调用相同的参数

java.lang.IllegalArgumentException : Malformed\uxxxx encoding while mvn install