コレクターが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
sがFXCollections
クラスのstaticファクトリで作成されます。
ストリームを最初に収集してList
にしてから、ObservableList
の中にラップします。 (残念ながら十分なEclipseの火星4.5.1でコンパイルが、javac
1.8.0_60に罰金コンパイルされません)
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.collectingAndThen(toList(), l -> FXCollections.observableArrayList(l)));
。
もう1つの可能性は、このためのカスタムコレクタを作成することです。これには、最初にList
を使用する必要がないという利点があります。要素はObservableList
の内部に直接収集されます。
toCollection
を使用して、より簡単に書き換えることができ
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collector.of(
FXCollections::observableArrayList,
ObservableList::add,
(l1, l2) -> { l1.addAll(l2); return l1; })
);
:
ObservableList<String> newList =
list.stream()
.filter(x -> x.startsWith("a"))
.collect(Collectors.toCollection(FXCollections::observableArrayList));
最後の式が厄介に見えます。ありがとう – Josephus87
@ Josephus87静的なインポートは少し助けます。また、中間リストを使用しない第2の可能性を追加しました。 – Tunaki
なぜ 'collect(toCollection(observerableArrayList))'は両方の問題を解決しますか? –
あなたはそれをやった、あなたはしませんでしたか? – assylias
@assyliasいいえ、ObservableArrayList'のコンストラクタはありません(実際にはイベントクラスではありません) – Tunaki