2016-04-14 18 views
11

RxJava gần đây đã giới thiệu Single. Có cách nào để chuyển đổi một quan sát đã tồn tại (đó là khá nhiều một đơn) thành một đơn mà không sửa đổi nguồn gốc của quan sát ban đầu?RxJava đã giới thiệu Single <T>. Làm cách nào để chuyển đổi một số <T> quan sát thành một đơn <T>?

Ví dụ, tôi có một lớp dịch vụ api với một phương thức trả về một Observable - về cơ bản là tìm nạp một User từ một tài nguyên từ xa. Giả sử tôi không thể sửa đổi dịch vụ. Tôi muốn tiêu thụ ở nơi khác nhưng trả lại một đĩa đơn. Làm thế nào để tôi làm điều này?

Một nhúm nhiều nền

RxJava thời gian gần đây đã giới thiệu khái niệm về một đơn mà là nhiều hơn hoặc ít hơn một Rx thân thiện callback đơn giản (ví dụ một Quan sát phát ra một đối tượng hoặc một lỗi) (đọc thêm về nó ở đây - http://reactivex.io/documentation/single.html)

Trả lời

22

2 phương pháp tiện lợi mới được thêm vào để thực hiện điều này.

toSingle() chuyển đổi một Quan sát mà phát ra một mục duy nhất thành một đơn mà phát ra rằng mục

toObservable chuyển đổi một đơn thành một Quan sát mà phát ra mục phát ra bởi các đơn và sau đó hoàn tất

(nguồn: http://reactivex.io/documentation/single.html)

+4

lưu ý rằng nếu đơn không có mặt hàng, .toObservable() sẽ không làm cho nó trở Observable.empty(). Thay vào đó nó sẽ vẫn ném NoSuchElementException. Vì vậy, kết quả quan sát được không phải là điều tương tự như nếu nguồn là một quan sát để bắt đầu với. – eis

2

Trong rxjava2 bạn có thể sử dụng Single.fromObservable().

3

Tôi nghĩ câu trả lời được chấp nhận đã lỗi thời. Bạn có lẽ nên kiểm tra các phương pháp sau đây.

singleOrError: Phát ra phần tử duy nhất và duy nhất, IndexOutOfBoundsException nếu nguồn dài hơn 1 mục hoặc NoSuchElementException nếu nguồn trống.

firstOrError: Phát ra phần tử đầu tiên hoặc NoSuchElementException nếu nguồn trống.

lastOrError: Phát ra lastelement hoặc NoSuchElementException nếu nguồn trống.

elementAtOrError: Phát ra phần tử chỉ mục hoặc NoSuchElementException. Thông tin

Thông tin thêm về trang này: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0

Các vấn đề liên quan