假设我有一个返回 List<Post>
的博客文章 api我想使用 RxJava 将其翻译成其他内容。总的来说,我想把一个长字符串分成段落,然后是单词,对每个单词做一些事情,组合成段落,然后组合回博客文章。每个帖子都可以分成多个段落,然后可以分成多个单词。从逻辑上讲,我想执行以下操作,但找不到异步方式来执行此操作。
- 从列表创建 Observable
- 将每个 Observable 拆分为
Observable<String>
在\n
这会给我段落 - 将段落拆分为
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();
}
关于java - 嵌套平面图可观察 rxJava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636596/