Javafx 将 SetProperty 绑定到从可观察对象生成集合的回调

Javafx bind SetProperty to a callback that produce a set from an observable

我有一个 SetProperty<Point> 和一个生成 Stream<Point> 的函数。

Stream<Point> generatePoints(Point p) {
    // ...
}
ObjectProperty<Point> selectedPointProperty() {
    // ...
}

SetProperty<Point> generatedPoints = new SimpleSetProperty();

我想将 generatedPoints 绑定到将 generatedPoints 应用于 selectedPointProperty() 结果的结果。我尝试了以下代码,但它有类型错误。

generatedPoints.bind(Bindings.createObjectBinding(() -> generatePoints(selectedPointProperty().get()).collect(Collectors.toSet()),
 selectedPointProperty()));

A SetProperty<T> 不是 Property<Set<T>> 而是 Property<ObservableSet<T>>

因此 属性 所需的类型和由

编辑的 return 类型
generatePoints(selectedPointProperty().get()).collect(Collectors.toSet())

不匹配。您需要从 Callable 中 return 一个 ObservableSet,例如:

generatedPoints.bind(Bindings.createObjectBinding(() -> FXCollections.observableSet(generatePoints(selectedPointProperty().get()).toArray(Point[]::new)),
        selectedPointProperty()));