/**
* 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
:Живого отображение JavaFX ObservableList или ReactFX LiveList
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? Или что-нибудь подобное?
См. [EasyBind] (https://github.com/TomasMikula/EasyBind) (также Томас Микула, который написал ReactFX). –
«FlatMap» для наблюдаемых списков планируется для ReactFX 2.0, хотя с более общей подписью, чем ваша, где каждый элемент списка можно сопоставить с наблюдаемым _list_ элементов (в отличие от одного наблюдаемого значения). Вы можете объединить его с [Val.asList()] (http://www.reactfx.org/javadoc/2.0-M4/org/reactfx/value/Val.html#asList--) для вашего варианта использования. –