[英]Nested flatmap observable rxJava
假設我有一個博客文章api,該API返回List<Post>
,我想使用RxJava將其轉換為其他內容。 總體而言,我想將長長的字符串分成多個段落,然后將單詞,對每個單詞做些事情,重新組合成段落,再組合成博客文章。 每個帖子可以分為多個段落,然后可以分為多個單詞。 從邏輯上講,我想執行以下操作,但找不到異步方式來執行此操作。
\\n
上的Observable<String>
,這將給我幾段內容 ' '
上' '
Observable<String>
,它將分段為單詞 我在弄清楚如何對一個特定術語進行多個級別的拆分和合並時遇到麻煩。 如果只需要分成幾頁,我可以做一些類似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.