package au.gov.amsa.util.rx; import rx.Observable.Operator; import rx.Subscriber; import rx.exceptions.OnErrorThrowable; public class OperatorFlattenIterable<T> implements Operator<T, Iterable<T>> { public static <T> Operator<T, Iterable<T>> flatten() { return new OperatorFlattenIterable<T>(); } @Override public Subscriber<? super Iterable<T>> call( final Subscriber<? super T> subscriber) { return new Subscriber<Iterable<T>>(subscriber) { @Override public void onCompleted() { subscriber.onCompleted(); } @Override public void onError(Throwable e) { subscriber.onError(e); } @Override public void onNext(Iterable<T> list) { for (T t : list) { if (subscriber.isUnsubscribed()) { return; } try { subscriber.onNext(t); } catch (Exception e) { onError(OnErrorThrowable.addValueAsLastCause(e, t)); return; } } } }; } }