Jos*_*s87 10 java lambda java-8 observablelist collectors
收藏家有可能给我一个ObservableArrayList吗?有点像这样:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
Run Code Online (Sandbox Code Playgroud)
Tun*_*aki 17
ObservableLists是使用类中的静态工厂创建的FXCollections.
您可以执行以下操作,首先将流收集到a中List,然后将其包装到内部ObservableList.
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.collectingAndThen(toList(), l -> FXCollections.observableArrayList(l)));
Run Code Online (Sandbox Code Playgroud)
(遗憾的是,它不能在Eclipse Mars 4.5.1上编译,但在javac1.8.0_60 上编译得很好).
另一种可能性是为此创建自定义收集器.这具有不需要首先使用a的优点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; })
);
Run Code Online (Sandbox Code Playgroud)
正如Louis Wasserman 在评论中指出的那样,最后一个表达式可以更简单地重写toCollection:
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.toCollection(FXCollections::observableArrayList));
Run Code Online (Sandbox Code Playgroud)