嵌套平面图可观察 rxJava
Nested flatmap observable rxJava
假设我有一个博客 post api return List<Post>
我想使用 RxJava 将其翻译成其他内容。总的来说,我想将一个长字符串分成段落,然后是单词,对每个单词做一些事情,组合成段落,然后组合回博客 post。每个 Post 可以分成多个段落,然后可以分成多个单词。从逻辑上讲,我想执行以下操作,但找不到异步方式来执行此操作。
- 从列表创建 Observable
- 在
\n
上将每个 Observable 拆分为 Observable<String>
,这将给我段落
- 在
' '
上将段落拆分为 Observable<String>
,这将分成单词
- 对每个单词做一些转换(有些单词会有标点符号作为它们的一部分,这很好)
- 将所有单词重新组合成段落,并在每个单词之间添加 space
- 将所有段落重新组合成一个Post,在每个段落之间放一个马车return。
我无法弄清楚如何对特定术语进行多级拆分和组合。如果我只需要拆分成页面,我可以执行类似 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();
}
假设我有一个博客 post api return List<Post>
我想使用 RxJava 将其翻译成其他内容。总的来说,我想将一个长字符串分成段落,然后是单词,对每个单词做一些事情,组合成段落,然后组合回博客 post。每个 Post 可以分成多个段落,然后可以分成多个单词。从逻辑上讲,我想执行以下操作,但找不到异步方式来执行此操作。
- 从列表创建 Observable
- 在
\n
上将每个 Observable 拆分为Observable<String>
,这将给我段落 - 在
' '
上将段落拆分为Observable<String>
,这将分成单词 - 对每个单词做一些转换(有些单词会有标点符号作为它们的一部分,这很好)
- 将所有单词重新组合成段落,并在每个单词之间添加 space
- 将所有段落重新组合成一个Post,在每个段落之间放一个马车return。
我无法弄清楚如何对特定术语进行多级拆分和组合。如果我只需要拆分成页面,我可以执行类似 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();
}