Collectors 是否可以向我返回 ObservableArrayList?有点像这样:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
Collectors 是否可以向我返回 ObservableArrayList?有点像这样:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
ObservableList
s 是使用类中的静态工厂创建的FXCollections
。
正如 Louis Wasserman在评论中指出的那样,这可以使用toCollection
:
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.toCollection(FXCollections::observableArrayList));
您还可以执行以下操作,首先将流收集到 a 中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
. 元素直接收集在 aObservableList
中。
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collector.of(
FXCollections::observableArrayList,
ObservableList::add,
(l1, l2) -> { l1.addAll(l2); return l1; })
);