簡體   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