gpt4 book ai didi

java - 收集器 lambda 返回可观察列表

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:30 24 4
gpt4 key购买 nike

Collectors 是否可以返回一个 ObservableArrayList?有点像这样:

ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));

最佳答案

ObservableList 是使用来自 FXCollections 的静态工厂创建的类。

正如 Louis Wasserman 所说 in the comments ,这可以使用 toCollection 来完成:

ObservableList<String> newList = 
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.toCollection(FXCollections::observableArrayList));

您还可以执行以下操作,首先将流收集到 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; })
);

关于java - 收集器 lambda 返回可观察列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com