簡體   English   中英

嵌套平面圖可觀察到的rxJava

[英]Nested flatmap observable rxJava

假設我有一個博客文章api,該API返回List<Post> ,我想使用RxJava將其轉換為其他內容。 總體而言,我想將長長的字符串分成多個段落,然后將單詞,對每個單詞做些事情,重新組合成段落,再組合成博客文章。 每個帖子可以分為多個段落,然后可以分為多個單詞。 從邏輯上講,我想執行以下操作,但找不到異步方式來執行此操作。

  • 從列表創建可觀察
  • 將每個Observable拆分為\\n上的Observable<String> ,這將給我幾段內容
  • 將段落拆分為' '' ' Observable<String> ,它將分段為單詞
  • 對每個單詞進行某種轉換(有些單詞會標點符號,這很好)
  • 將所有單詞組合回段落中,每個單詞之間留一個空格
  • 將所有段落組合回一個Post中,然后在每個段落之間放回車符。

我在弄清楚如何對一個特定術語進行多個級別的拆分和合並時遇到麻煩。 如果只需要分成幾頁,我可以做一些類似flatmap(Observable :: from).toList()的操作,但這似乎行不通。 任何幫助將不勝感激。

我認為類似這樣的方法應該可以正常工作,代碼很容易解釋。

我對Observable#from進行了一些嵌套調用,以將帖子分為段落和段落以及單詞。 然后,我使用Observable#reduce串聯單詞以獲得單個段落,然后再次reduce以將段落串聯到單個帖子。

Observable<List<String>> blogPostsWithReversedWords(List<String> blogPosts) {
    return Observable.from(blogPosts)
            .flatMap(this::blogPostToParagraphs)
            .toList();
}

Observable<String> blogPostToParagraphs(String post) {
    return Observable.from(post.split("\n"))
            .flatMap(this::paragraphToWords)
            .reduce((prevText, nextParagraph) -> prevText + "\n" + nextParagraph);
}

Observable<String> paragraphToWords(String paragraph) {
    return Observable.from(paragraph.split(" "))
            .map(this::reverseWord)
            .reduce((prevText, nextWord) -> prevText + "\n" + nextWord);
}

String reverseWord(String word) {
    return new StringBuilder(word).reverse().toString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM