Серия “как сделать в RxJava” - Часть 1

Если эвент eventToCheck есть, пропустить текущий эвент event и ждать событие-триггер eventToContinue, а если эвента нет, то продолжить выполнение:

	/**
	 * Use with flatMap(...)
	 *
	 * @param skipTrigger     skips first event if any event popped from skipTrigger
	 * @param continueTrigger continue event passing if any event popped from continueTrigger
	 * @param <T>             type of passing event
	 * @return Observable, put it inside flatMap operator
	 */
	public static <T> Function<T, ObservableSource<? extends T>> skipFirstIfTriggerAndContinue(
		final Observable<?> skipTrigger,
		final ObservableSource<?> continueTrigger) {
		
		return t -> Observable.merge(
			
			Observable.just(t).takeUntil(skipTrigger.take(1)),
			
			skipTrigger
				.take(1)
				.zipWith(continueTrigger, (e1, e2) -> t)
		
		).take(1);
	}

Теперь как это использовать:

Observable.just(event)
  .flatMap(skipFirstIfTriggerAndContinue(
    Observable.just(eventToCheck),
    Observable.just(eventToContinue)
  ))
  .doOnNext(/*event passed...*/e->Log.i("hello", "event passed:"+event)