Mappage en direct de JavaFX ObservableList ou 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
);
J'ai écrit la méthode utilitaire JavaFX ci-dessus qui crée un mappage en direct d'un ObservableList
, mettant à jour le mappage chaque fois que la liste source change. J'ai découvert plus tard ReactFX et son équivalent LiveList.map
:
public interface LiveList {
default <F> LiveList<F> map(Function<? super E,? extends F> f);
}
Ne voulant pas réinventer à nouveau la roue, je cherche maintenant une fonction de carte qui renvoie une liste d'observables et surveille automatiquement ces observables. Fondamentalement, un flatMap
pour une liste complète. Par exemple, si j'avais ceci:
<T, R> ListBinding<R> flatMap(
ObservableList<? extends T> list,
Function<T, ObservableValue<? extends R>> mapper
);
Alors je pourrais faire ceci:
ObservableList<Button> buttons;
ObservableList<Integer> widths = flatMap(buttons, Button::widthProperty);
Cette liste widths
augmenterait et diminuerait si des boutons sont ajoutés ou supprimés, et serait mise à jour si les largeurs des boutons changent.
Une telle fonction existe-t-elle dans JavaFX ou dans ReactFX? Ou quelque chose de semblable?
1 answers
Je ne connais aucune implémentation existante de flatMap
pour les listes observables.
Il est cependant prévu pour ReactFX 2.0, probablement avec cette signature
public interface LiveList {
default <F> LiveList<F> flatMap(Function<? super E,? extends ObservableList<F>> f);
}
Qui est plus général que ce que vous proposez: il mappe un élément à une list, au lieu d'une seule valeur.