ObservableList
s создаются с помощью статических фабрик из FXCollections
класса.
Вы можете сделать следующее, которое сначала собирает поток в List
, а затем обертывает его внутри ObservableList
.
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.collectingAndThen(toList(), l -> FXCollections.observableArrayList(l)));
(которая достаточно, к сожалению, не компилируется на Eclipse, Mars 4.5.1, но отлично компилируется на javac
1.8.0_60).
Другая возможность - создать для этого сборщик. Это имеет то преимущество, что нет необходимости сначала использовать List
. Элементы непосредственно собираются внутри 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; })
);
Как отметил Луи Вассермана in the comments, это последнее выражение можно переписать более просто с помощью toCollection
:
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.toCollection(FXCollections::observableArrayList));
Вы просто сделали это, не так ли? – assylias
@assylias Нет, конструктор для 'ObservableArrayList' (это не событие класса на самом деле) – Tunaki