收集器 lambda return 可观察列表
Collectors lambda return observable list
Collectors 可以 return 我一个 ObservableArrayList 吗?有点像这样:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
ObservableList
s 是使用来自 FXCollections
class.
的静态工厂创建的
正如 Louis Wasserman 所指出的,这可以使用 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; })
);
Collectors 可以 return 我一个 ObservableArrayList 吗?有点像这样:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
ObservableList
s 是使用来自 FXCollections
class.
正如 Louis Wasserman 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; })
);