File tree Expand file tree Collapse file tree
src/main/java/io/reactivex/rxjavafx Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -65,6 +65,18 @@ public static <T> Observable<T> valuesOf(final ObservableValue<T> fxObservable)
6565 return ObservableValueSource .fromObservableValue (fxObservable );
6666 }
6767
68+ /**
69+ * Create an rx Observable from a JavaFX ObservableValue
70+ *
71+ * @param fxObservable the observed ObservableValue
72+ * @param nullSentinel the default sentinel value emitted when the observable is null
73+ * @param <T> the type of the observed value
74+ * @return an Observable emitting values as the wrapped ObservableValue changes, null will be replaces with nullSentinel
75+ */
76+ public static <T > Observable <T > valuesOf (final ObservableValue <T > fxObservable , final T nullSentinel ) {
77+ return ObservableValueSource .fromObservableValue (fxObservable , nullSentinel );
78+ }
79+
6880 /**
6981 * Create an rx Observable from a JavaFX ObservableValue
7082 *
Original file line number Diff line number Diff line change @@ -42,6 +42,29 @@ public static <T> Observable<T> fromObservableValue(final ObservableValue<T> fxO
4242 });
4343 }
4444
45+ public static <T > Observable <T > fromObservableValue (final ObservableValue <T > fxObservable , final T nullSentinel ) {
46+ if (nullSentinel == null ) {
47+ throw new NullPointerException ("The null value sentinel must not be null." );
48+ }
49+ return Observable .create ((ObservableEmitter <T > emitter ) -> {
50+ if (fxObservable .getValue () != null ) {
51+ emitter .onNext (fxObservable .getValue ());
52+ }
53+
54+ final ChangeListener <T > listener = (observableValue , prev , current ) -> {
55+ if (current != null ) {
56+ emitter .onNext (current );
57+ } else {
58+ emitter .onNext (nullSentinel );
59+ }
60+ };
61+
62+ fxObservable .addListener (listener );
63+
64+ emitter .setDisposable (JavaFxSubscriptions .unsubscribeInEventDispatchThread (() -> fxObservable .removeListener (listener )));
65+ });
66+ }
67+
4568 public static <T > Observable <Optional <T >> fromNullableObservableValue (final ObservableValue <T > fxObservable ) {
4669 return Observable .create ((ObservableEmitter <Optional <T >> emitter ) -> {
4770 emitter .onNext (Optional .ofNullable (fxObservable .getValue ()));
You can’t perform that action at this time.
0 commit comments