Zip 연산자를 찾고있는 것 같습니다 .
사용 방법에는 몇 가지가 있으므로 예를 살펴 보겠습니다. 다양한 유형의 몇 가지 간단한 관찰 가능 항목이 있다고 가정 해 보겠습니다.
Observable<Integer> obs1 = Observable.just(1);
Observable<String> obs2 = Observable.just("Blah");
Observable<Boolean> obs3 = Observable.just(true);
모두를 기다리는 가장 간단한 방법은 다음과 같습니다.
Observable.zip(obs1, obs2, obs3, (Integer i, String s, Boolean b) -> i + " " + s + " " + b)
.subscribe(str -> System.out.println(str));
zip 함수에서 매개 변수에는 압축되는 옵저버 블 유형에 해당하는 구체적인 유형이 있습니다.
관찰 가능 항목 목록을 직접 압축하는 것도 가능합니다.
List<Observable<?>> obsList = Arrays.asList(obs1, obs2, obs3);
Observable.zip(obsList, (i) -> i[0] + " " + i[1] + " " + i[2])
.subscribe(str -> System.out.println(str));
... 또는 목록을 다음으로 래핑합니다 Observable<Observable<?>>
.
Observable<Observable<?>> obsObs = Observable.from(obsList);
Observable.zip(obsObs, (i) -> i[0] + " " + i[1] + " " + i[2])
.subscribe(str -> System.out.println(str));
그러나이 두 경우 모두 Object[]
목록에있는 옵저버 블 유형과 그 수를 미리 알 수 없기 때문에 zip 함수는 단일 매개 변수 만 허용 할 수 있습니다. 이것은 zip 함수가 매개 변수의 수를 확인하고 그에 따라 캐스트해야 함을 의미합니다.
어쨌든 위의 모든 예는 결국 인쇄됩니다. 1 Blah true
편집 : Zip을 사용할 때 Observables
압축되는 모든 항목이 동일한 수의 항목을 방출 하는지 확인하십시오 . 위의 예에서 세 가지 Observable은 모두 단일 항목을 내보냈습니다. 다음과 같이 변경하면 :
Observable<Integer> obs1 = Observable.from(new Integer[]{1,2,3});
Observable<String> obs2 = Observable.from(new String[]{"Blah","Hello"});
Observable<Boolean> obs3 = Observable.from(new Boolean[]{true,true});
그런 다음 1, Blah, True
및 2, Hello, True
압축 기능 (들)에 전달 된 항목 만 할 것이다. 3
다른 관찰 가능 항목이 완료되었으므로 항목 은 압축되지 않습니다.