假设我有一个博客文章api返回List<Post>
我希望将其转换为其他内容使用RxJava。总的来说,我想把一个很长的字符串分成段落然后单词,对每个单词做一些事情,然后组合成段落并组合成一篇博文。每个帖子可以分成多个段落,然后可以分成多个单词。从逻辑上讲,我想要执行以下操作,但无法找到异步方式。
Observable<String>
\n
,这将为我提供段落Observable<String>
上的段落拆分为' '
,这些段落将分为单词我无法弄清楚如何在特定术语上进行多级拆分和组合。如果我只需要拆分成页面,我可以做一些像flatmap(Observable :: from).toList()这样的东西,但这似乎不起作用。任何帮助将不胜感激。
答案 0 :(得分:3)
我认为这样的事情应该可以正常工作,代码非常明显。
我对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();
}