rx-java2 - 使用 RxJava2 连接字符串

标签 rx-java2 rx-android

我有一个名为 Sport 的简单 POJO 列表,它有一个名称字段。 连接列表中所有名称的最佳方法是什么?

Observable.just(member.getSports())
          .map(sports -> {
              StringBuilder builder = new StringBuilder();
              for (Sport sport : sports) {
                  builder.append(sport.getName());
              }
              return builder.toString()
           })

我相信一定有更好的方法?

最佳答案

Willi Mentzel 是对的,您不需要 Rx,但是如果您想在纯 Java 中使用它以提高可读性,这里有一个利用 Rx2 的好方法

// Get a list of sports names
Observable<String> names = Observable.fromIterable(member.getSports()).map(sport -> sport.getName())

// Concat list into a single string output separated by comma
Single<String> listOfNames = names.collect(StringBuilder::new, (sb, x) -> sb.append(x).append(", ")).map(StringBuilder::toString).toSingle()

Java 中的一行代码:

Observable.fromIterable(member.getSports()).map(sport -> sport.getName()).collect(StringBuilder::new, (sb, x) -> sb.append(x).append(", ")).map(StringBuilder::toString).toSingle()

Kotlin 与 RxKotlin 的单行代码

member.getSports().map { it.name }.toObservable().collect(StringBuilder::new, (sb, x) -> sb.append(x).append(", ")).map(StringBuilder::toString).toSingle()

产生:

volleyball, hockey, racquetball

关于rx-java2 - 使用 RxJava2 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013032/

相关文章:

java - 使用 RXJava 2 异步读/写 Realm

android - 单击后退按钮两次以使用 rxjava 退出 Activity

android - 使用 Retrofit 2.0 Observables 时出现错误时如何获取响应正文

java - 在不创建全新列表类的情况下将 Arraylist 转换为 Observable 列表?

java - 如何测试请求是否增加指标而在 Vert.x 中没有得到任何响应?

android - RxJava - 将列表的结果映射到另一个列表

android - 如果要向Android Debounce添加条件,该怎么办?

java - RxJava : behaviour of combineLatest

android - RxJava : Creating observable from a Nullable object

android - 致命 - 接口(interface)未实现 - OkHttp3 - Android