嵌套平面图可观察 rxJava

Nested flatmap observable rxJava

假设我有一个博客 post api return List<Post> 我想使用 RxJava 将其翻译成其他内容。总的来说,我想将一个长字符串分成段落,然后是单词,对每个单词做一些事情,组合成段落,然后组合回博客 post。每个 Post 可以分成多个段落,然后可以分成多个单词。从逻辑上讲,我想执行以下操作,但找不到异步方式来执行此操作。

我无法弄清楚如何对特定术语进行多级拆分和组合。如果我只需要拆分成页面,我可以执行类似 flatmap(Observable::from).toList() 的操作,但这似乎行不通。任何帮助将不胜感激。

我认为像这样的东西应该可以正常工作,代码是不言自明的。

我对 Observable#from 进行了一些嵌套调用,以将 post 拆分为段落,将段落拆分为单词。然后我使用 Observable#reduce 连接单词以获得单个段落,然后再次使用 reduce 将段落连接成单个 post。

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();
}