JavaFX ObservableList 或 ReactFX LiveList 的实时映射
Live mapping of JavaFX ObservableList or ReactFX LiveList
/**
* 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 and its equivalent LiveList.map
:
public interface LiveList {
default <F> LiveList<F> map(Function<? super E,? extends F> f);
}
不想再次重新发明轮子,我现在正在寻找一个 map 函数,它 returns 一个 observables 列表并自动监视这些 observables。基本上整个列表的 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);
}
这比您建议的更通用:它将元素映射到 列表,而不仅仅是单个值。
/**
* 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 and its equivalent LiveList.map
:
public interface LiveList {
default <F> LiveList<F> map(Function<? super E,? extends F> f);
}
不想再次重新发明轮子,我现在正在寻找一个 map 函数,它 returns 一个 observables 列表并自动监视这些 observables。基本上整个列表的 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);
}
这比您建议的更通用:它将元素映射到 列表,而不仅仅是单个值。