コレクタが ObservableArrayList を返すことは可能ですか? このような少し:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
コレクタが ObservableArrayList を返すことは可能ですか? このような少し:
ObservableList<String> newList = list.stream().
filter(x -> x.startsWith("a").
collect(Collectors.toCollection(ObservableArrayList::new));
ObservableList
FXCollections
s は、クラスの静的ファクトリで作成されます。
コメントで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 では問題なくコンパイルされます)。
もう 1 つの可能性は、このためのカスタム Collector を作成することです。これには、最初に を使用する必要がないという利点があります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; })
);