src/main/java/io/reactivex/Flowable.java
@CheckReturnValue
    @BackpressureSupport(BackpressureKind.FULL)
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <U, R> Flowable<R> zipWith(Publisher<? extends U> other,
            BiFunction<? super T, ? super U, ? extends R> zipper, boolean delayError) {
        return zip(this, other, zipper, delayError);
    }
@CheckReturnValue
    @BackpressureSupport(BackpressureKind.FULL)
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <U, R> Flowable<R> zipWith(Publisher<? extends U> other,
            BiFunction<? super T, ? super U, ? extends R> zipper, boolean delayError) {
        return zip(this, other, zipper, delayError);
    }
Returns a Flowable that emits items that are the result of applying a specified function to pairs of
values, one each from the source Publisher and another specified Publisher.
<p>
The operator subscribes to its sources in the order they are specified and completes eagerly if
one of the sources is shorter than the rest while canceling the other sources. Therefore, it
is possible those other sources will never be able to run to completion (and thus not calling
{@code doOnComplete()}). This can also happen if the sources are exactly the same length; if
source A completes and B has been consumed and is about to complete, the operator detects A won't
be sending further values and it will cancel B immediately. For example:
<pre><code>range(1, 5).doOnComplete(action1).zipWith(range(6, 5).doOnComplete(action2), (a, b) -&gt; a + b)</code></pre>
{@code action1} will be called but {@code action2} won't.
<br>To work around this termination property,
use {@link #doOnCancel(Action)} as well or use {@code using()} to do cleanup in case of completion
or cancellation.
<p>
<img width="640" height="380" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/zip.png" alt="">
<dl>
<dt><b>Backpressure:</b></dt>
<dd>The operator expects backpressure from the sources and honors backpressure from the downstream.
(I.e., zipping with {@link #interval(long, TimeUnit)} may result in MissingBackpressureException, use
one of the {@code onBackpressureX} to handle similar, backpressure-ignoring sources.</dd>
<dt><b>Scheduler:</b></dt>
<dd>{@code zipWith} does not operate by default on a particular {@link Scheduler}.</dd>
</dl>

@param <U>
the type of items emitted by the {@code other} Publisher
@param <R>
the type of items emitted by the resulting Publisher
@param other
the other Publisher
@param zipper
a function that combines the pairs of items from the two Publishers to generate the items to
be emitted by the resulting Publisher
@param delayError
if true, errors from the current Flowable or the other Publisher is delayed until both terminate
@return a Flowable that pairs up values from the source Publisher and the {@code other} Publisher
and emits the results of {@code zipFunction} applied to these pairs
@see <a href="http://reactivex.io/documentation/operators/zip.html">ReactiveX operators documentation: Zip</a>
@since 2.0