src/main/java/io/reactivex/Observable.java
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.COMPUTATION)
    public final Observable<T> debounce(long timeout, TimeUnit unit) {
        return debounce(timeout, unit, Schedulers.computation());
    }
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.COMPUTATION)
    public final Observable<T> debounce(long timeout, TimeUnit unit) {
        return debounce(timeout, unit, Schedulers.computation());
    }
@ CheckReturnValue @ SchedulerSupport ( SchedulerSupport . COMPUTATION ) public final Observable < T > debounce ( long timeout , TimeUnit unit ) { return debounce ( timeout , unit , Schedulers . computation ( ) ) ; }
Returns an Observable that mirrors the source ObservableSource, except that it drops items emitted by the
source ObservableSource that are followed by newer items before a timeout value expires. The timer resets on
each emission.
<p>
<em>Note:</em> If items keep being emitted by the source ObservableSource faster than the timeout then no items
will be emitted by the resulting ObservableSource.
<p>
<img width="640" height="310" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/debounce.png" alt="">
<p>
Delivery of the item after the grace period happens on the {@code computation} {@code Scheduler}'s
{@code Worker} which if takes too long, a newer item may arrive from the upstream, causing the
{@code Worker}'s task to get disposed, which may also interrupt any downstream blocking operation
(yielding an {@code InterruptedException}). It is recommended processing items
that may take long time to be moved to another thread via {@link #observeOn} applied after
{@code debounce} itself.
<dl>
<dt><b>Scheduler:</b></dt>
<dd>{@code debounce} operates by default on the {@code computation} {@link Scheduler}.</dd>
</dl>

@param timeout
the length of the window of time that must pass after the emission of an item from the source
ObservableSource in which that ObservableSource emits no items in order for the item to be emitted by the
resulting ObservableSource
@param unit
the unit of time for the specified {@code timeout}
@return an Observable that filters out items from the source ObservableSource that are too quickly followed by
newer items
@see <a href="http://reactivex.io/documentation/operators/debounce.html">ReactiveX operators documentation: Debounce</a>
@see #throttleWithTimeout(long, TimeUnit)
Returns an Observable that mirrors the source ObservableSource except that it drops items emitted by the source ObservableSource that are followed by newer items before a timeout value expires . The timer resets on each emission . <p > <em > Note : < / em > If items keep being emitted by the source ObservableSource faster than the timeout then no items will be emitted by the resulting ObservableSource . <p > <img width = 640 height = 310 src = https : // raw . github . com / wiki / ReactiveX / RxJava / images / rx - operators / debounce . png alt = > <p > Delivery of the item after the grace period happens on the { @code computation } { @code Scheduler } s { @code Worker } which if takes too long a newer item may arrive from the upstream causing the { @code Worker } s task to get disposed which may also interrupt any downstream blocking operation ( yielding an { @code InterruptedException } ) . It is recommended processing items that may take long time to be moved to another thread via { @link #observeOn } applied after { @code debounce } itself . <dl > <dt > <b > Scheduler : < / b > < / dt > <dd > { @code debounce } operates by default on the { @code computation } { @link Scheduler } . < / dd > < / dl >