Observable<Integer> source = Observable.zip(
Observable.just(100,200,300),
Observable.just(10,20,30),
Observable.just(1,2,3),
(a,b,c) -> a+b+c);
source.subscribe(Log::i);
첫 번째 Observable에서만 데이터를 발행하거나 두 번째 Observable의 데이터 흐름만 있으면 구독자에게 어떤 데이터도 발행되지 않는다.
하지만, 두 Observable 모두 값을 발행하면 그때는 결과 값이 나오고 그 이후부터 둘 중 어떤 것이 갱신되던지 최신 결과값만 보여준다.
이것이 zip()하고의 차이점이다.
String[] data = {PUPPLE, ORANGE, SKY, YELLOW};
String[] data2 = {DIAMOND, STAR, PENTAGON};
Observable<String> source = Observable.combineLatest(
Observable.fromArray(data)
.zipWith( //zipWith()로 깔끔하게 코드 정리
Observable.interval(100L, TimeUnit.MILLISECONDS),
(shape, notUsed) -> Shape.getColor(shape)),
Observable.fromArray(data2)
.zipWith(
Observable.interval(150L, 200L, TimeUnit.MILLISECONDS),
(shape, notUsed) -> Shape.getSuffix(shape)),
(v1, v2) -> v1 + v2);
source.subscribe(Log::i);
CommonUtils.sleep(1000);
CommonUtils.exampleComplete();
2개의 Observable 데이터 개수가 다르다.
첫 번째는 Observable에 색상을 4개 얻어오고, 두 번째 Observable은 모양 3개를 얻어온다.
첫 번째 Observable이 100ms간격으로 발행하고 두 번째 Observable이 150ms를 쉬고 200ms 간격으로 값을 발행한다.
zip()과 다르게 두 개의 값이 한 개씩 발행 된 이후 부터는 어느 1개의 값만 변경되어도 결과가 발행된다.