code: @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.NONE)
      public final Observable<T> takeUntil(Predicate<? super T> stopPredicate) {
          ObjectHelper.requireNonNull(stopPredicate, "predicate is null");
          return RxJavaPlugins.onAssembly(new ObservableTakeUntilPredicate<T>(this, stopPredicate));
      }
docs: Returns an Observable that emits items emitted by the source Observable, checks the specified predicate
  for each item, and then completes when the condition is satisfied.
  <p>
  <img width="640" height="305" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/takeUntil.p.png" alt="">
  <p>
  The difference between this operator and {@link #takeWhile(Predicate)} is that here, the condition is
  evaluated <em>after</em> the item is emitted.
  
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code takeUntil} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  
  @param stopPredicate
  a function that evaluates an item emitted by the source Observable and returns a Boolean
  @return an Observable that first emits items emitted by the source Observable, checks the specified
  condition after each item, and then completes when the condition is satisfied.
  @see <a href="http://reactivex.io/documentation/operators/takeuntil.html">ReactiveX operators documentation: TakeUntil</a>
  @see Observable#takeWhile(Predicate)
  @since 1.1.0