java - 嵌套平面图可观察 rxJava

标签 java android reactive-programming rx-java

假设我有一个返回 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/

相关文章:

javascript - BaconJS observable zip,示例属性映射失败

java - fromCallable 和 defer 有什么区别?

Java 一个函数,支持多个查询

java - Java中的动态数组 - 因此我们可以根据用户的输入决定数组的大小

android - 将 SupportMapFragment 添加到 LinearLayout

java - 在 Android 上移动文件时询问用户是否重写文件

scala - 玩mongo枚举器意外停止

Java web 应用程序 web.xml 参数到 POJO

java - 使用 java 8 播放外部 mp3

android - 当我将Gradle用于Android应用程序时出现 “merge incompatible”错误