ObservableList
s vengono creati con le fabbriche statici della classe FXCollections
.
È possibile eseguire quanto segue, che prima raccoglie lo stream in un List
e lo avvolge all'interno di uno ObservableList
.
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.collectingAndThen(toList(), l -> FXCollections.observableArrayList(l)));
(che purtroppo non sufficiente compilare su Eclipse 4.5.1 Marte, ma compila bene sulla javac
1.8.0_60).
Un'altra possibilità è creare un servizio di raccolta personalizzato per questo. Questo ha il vantaggio che non è necessario utilizzare prima un List
. Gli elementi sono raccolti direttamente all'interno di uno ObservableList
.
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collector.of(
FXCollections::observableArrayList,
ObservableList::add,
(l1, l2) -> { l1.addAll(l2); return l1; })
);
Come notato da Louis Wasserman in the comments, questa ultima espressione può essere riscritta più semplicemente utilizzando toCollection
:
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.toCollection(FXCollections::observableArrayList));
È appena fatto, vero? – assylias
@assylias No, non esiste un costruttore per 'ObservableArrayList' (non è un evento una classe in realtà) – Tunaki