WarpPI/core/src/main/java/it/cavallium/warppi/flow/ObservableMap.java
2018-09-22 11:17:30 +02:00

50 lines
1.3 KiB
Java

package it.cavallium.warppi.flow;
import java.util.function.Function;
public class ObservableMap<T, U> extends Observable<U> {
private final Observable<T> originalObservable;
private final Function<T, U> mapAction;
private volatile boolean initialized = false;
private Disposable mapDisposable;
public ObservableMap(final Observable<T> originalObservable, final Function<T, U> mapAction) {
super();
this.originalObservable = originalObservable;
this.mapAction = mapAction;
}
private void initialize() {
this.mapDisposable = originalObservable.subscribe((t) -> {
for (final Subscriber<? super U> sub : subscribers)
sub.onNext(mapAction.apply(t));;
}, (e) -> {
for (final Subscriber<? super U> sub : subscribers)
sub.onError(e);;
}, () -> {
for (final Subscriber<? super U> sub : subscribers)
sub.onComplete();;
});
}
private void chechInitialized() {
if (!initialized) {
initialized = true;
initialize();
}
}
@Override
public Disposable subscribe(final Subscriber<? super U> sub) {
final Disposable disp = super.subscribe(sub);
chechInitialized();
return disp;
}
@Override
public void onDisposed(final Subscriber<? super U> sub) {
super.onDisposed(sub);
mapDisposable.dispose();
}
}