code: @CheckReturnValue
      @BackpressureSupport(BackpressureKind.UNBOUNDED_IN)
      @SchedulerSupport(SchedulerSupport.NONE)
      public final Single<T> single(T defaultItem) {
          ObjectHelper.requireNonNull(defaultItem, "defaultItem is null");
          return RxJavaPlugins.onAssembly(new FlowableSingleSingle<T>(this, defaultItem));
      }
docs: Returns a Single that emits the single item emitted by the source Publisher, if that Publisher
  emits only a single item, or a default item if the source Publisher emits no items. If the source
  Publisher emits more than one item, an {@code IllegalArgumentException} is signaled instead.
  <p>
  <img width="640" height="315" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/singleOrDefault.png" alt="">
  <dl>
  <dt><b>Backpressure:</b></dt>
  <dd>The operator honors backpressure from downstream and consumes the source {@code Publisher} in an
  unbounded manner (i.e., without applying backpressure).</dd>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code single} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  
  @param defaultItem
  a default value to emit if the source Publisher emits no item
  @return a Single that emits the single item emitted by the source Publisher, or a default item if
  the source Publisher is empty
  @see <a href="http://reactivex.io/documentation/operators/first.html">ReactiveX operators documentation: First</a>