Observable 클래스는 데이터를 무한하게 발행할 수 있지만, Single 클래스는 오직 1개의 데이터만 발행하도록 한정한다.
결과가 유일한 서버 API를 호출할 때 유용하다.

이미지 출처 : https://reactivex.io/documentation/ko/single.html#
- 데이터가 발행과 동시에 종료된다.
onNext()와 onComplete() 함수가 onSuccess() 함수로 통합된 것이다.
따라서 Single 클래스의 라이프사이클 함수는 onSuccess(T value)와 onError() 함수로 구성된다.
just() 함수 활용 예
Single<String> source = Single.just("Hello Single");
source.subscribe(System.out::println).dispose();
Observable과 거의 같은 방법으로 사용가능.
가장 간단한 방법은 Observable처럼 just()를 호출하는 것이다.
Single은 Observable의 특수 형태이므로 Observable에서 변환 가능하다.
// 1. Observable에서 Single 객체로의 변환
Observable<String> source = Observable.just("Hello Single");
Single.fromObservable(source)
.subscribe(System.out::println)
.dispose();
// 2. single() 함수를 호출해 Single 객체 생성
Observable.just("Hello Single")
.single("default item")
.subscribe(System.out::println)
.dispose();
// 3. first() 함수를 호출해 Single 객체 생성
String[] colors = {"RED", "BLUE", "GOLD"};
Observable.fromArray(colors)
.first("default value")
.subscribe(System.out::println)
.dispose();
// 4. empty Observable에서 Single 객체 생성
Observable.empty()
.single("default value")
.subscribe(System.out::println)
.dispose();
// 5. take() 함수에서 Single 객체 생성
Observable.just(new Order("ORD-1"), new Order("ORD-2"))
.take(1)
.single(new Order("default order"))
.subscribe(System.out::println)
.dispose();
Single<String> source = Observable
.just("Hello Single", "Error")
.single("default item");
source.subscribe(System.out::println).dispose();
Caused by: java.lang.IllegalArgumentException: Sequence contains more than one element!