/**
* An observable analogue of {@code Stream.map}. The output list is updated
* whenever the input list changes.
*/
public static <T, R> ListBinding<R> map(
ObservableList<? extends T> list,
Function<T, ? extends R> mapper
);
我编写了上面的JavaFX实用程序方法,该方法创建了ObservableList
的实时映射,并在源列表更改时随时更新映射。我后来发现了ReactFX及其等效LiveList.map
:
public interface LiveList {
default <F> LiveList<F> map(Function<? super E,? extends F> f);
}
不想再次重新发明轮子,我现在正在寻找一个地图函数,它返回可观察量列表并自动监视这些可观察量。基本上是整个列表的flatMap
。例如,如果我有这个:
<T, R> ListBinding<R> flatMap(
ObservableList<? extends T> list,
Function<T, ObservableValue<? extends R>> mapper
);
然后我可以这样做:
ObservableList<Button> buttons;
ObservableList<Integer> widths = flatMap(buttons, Button::widthProperty);
如果添加或删除按钮,此widths
列表将增大和缩小,如果按钮的宽度更改,此列表将更新。
JavaFX或ReactFX中是否存在这样的函数?还是类似的东西?
我不知道任何现有的可观察列表的flatMap
实现。
但是,它计划用于ReactFX 2.0,可能具有此签名
public interface LiveList {
default <F> LiveList<F> flatMap(Function<? super E,? extends ObservableList<F>> f);
}
这比你提出的更通用:它将一个元素映射到一个列表,而不仅仅是一个值。