将observable转换为list

Kha*_*yen 37 java reactive-programming rx-java

我正在使用RxJava.

我有一个Observable<T>.我如何将其转换为List<T>

似乎是一个简单的操作,但我无法在网上的任何地方找到它.

did*_*now 76

希望这可以帮助.

List<T> myList = myObservable.toList().toBlocking().single();

谢谢

阿南德拉曼

  • 它会导致阻塞,而不是asyn (6认同)
  • @ZulqurnainJutt - "toBlocking"电话是否将它送出?(问题不要求它是异步的) (5认同)

sol*_*4me 23

您可以使用toList()toSortedList().例如

observable.toList(myObservable)
          .subscribe({ myListOfSomething -> do something useful with the list });
Run Code Online (Sandbox Code Playgroud)

  • 这不会将其转换为列表.这基本上和我调用`subscribe`一样. (9认同)
  • 另请注意,toList()仅在序列完成时创建列表,因此对长时间运行的流没有用 (4认同)

And*_*rey 12

RxJava 2+:

List<T> = theObservarale
             .toList()
             .blockingGet();
Run Code Online (Sandbox Code Playgroud)


ara*_*oid 5

您还可以使用collect运算符:

    ArrayList list = observable.collect(ArrayList::new, ArrayList::add)
                               .toBlocking()
                               .single();
Run Code Online (Sandbox Code Playgroud)

使用collect,您可以选择Collection您喜欢的类型并在将其添加到列表之前对该项目执行附加操作。

  • 收集可以使用方法引用编写为`collect(ArrayList::new, ArrayList::add)` (3认同)