@Override public <M> ValueView<M> flatMap ( final Function<? super T, ? extends ValueView<M>> func) { final AbstractValue<T> outer = this; final ValueView<? extends ValueView<M>> mapped = map(func); return new MappedValue<M>() { private Connection conn; @Override public M get () { return mapped.get().get(); } @Override public String toString () { return outer + ".flatMap(" + func + ")"; } @Override protected Connection connect () { conn = mapped.connect(new UnitSlot() { public void onEmit () { reconnect(); } }); return mapped.get().connect(new Listener<M>() { @Override public void onChange (M value, M ovalue) { notifyChange(value, ovalue); } }); } @Override protected void disconnect () { super.disconnect(); if (conn != null) conn.close(); } }; }
@Override public <M> ValueView<M> flatMap ( final Function<? super T, ? extends ValueView<M>> func) { final AbstractValue<T> outer = this; final ValueView<? extends ValueView<M>> mapped = map(func); return new MappedValue<M>() { private Connection conn; @Override public M get () { return mapped.get().get(); } @Override public String toString () { return outer + ".flatMap(" + func + ")"; } @Override protected Connection connect () { conn = mapped.connect(new UnitSlot() { public void onEmit () { reconnect(); } }); return mapped.get().connect(new Listener<M>() { @Override public void onChange (M value, M ovalue) { notifyChange(value, ovalue); } }); } @Override protected void disconnect () { super.disconnect(); if (conn != null) conn.close(); } }; }