code: @SuppressWarnings("unchecked")
      @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.NONE)
      public static <T> Observable<T> concat(
              ObservableSource<? extends T> source1, ObservableSource<? extends T> source2,
              ObservableSource<? extends T> source3, ObservableSource<? extends T> source4) {
          ObjectHelper.requireNonNull(source1, "source1 is null");
          ObjectHelper.requireNonNull(source2, "source2 is null");
          ObjectHelper.requireNonNull(source3, "source3 is null");
          ObjectHelper.requireNonNull(source4, "source4 is null");
          return concatArray(source1, source2, source3, source4);
      }
docs: Returns an Observable that emits the items emitted by four ObservableSources, one after the other, without
  interleaving them.
  <p>
  <img width="640" height="380" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/concat.png" alt="">
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code concat} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  
  @param <T> the common element base type
  @param source1
  an ObservableSource to be concatenated
  @param source2
  an ObservableSource to be concatenated
  @param source3
  an ObservableSource to be concatenated
  @param source4
  an ObservableSource to be concatenated
  @return an Observable that emits items emitted by the four source ObservableSources, one after the other,
  without interleaving them
  @see <a href="http://reactivex.io/documentation/operators/concat.html">ReactiveX operators documentation: Concat</a>