繁体   English   中英

递归如何与Java 8 Stream一起使用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM