我有一个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()));

最佳答案

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

因此,属性所需的类型和的返回类型

generatePoints(selectedPointProperty().get()).collect(Collectors.toSet())


不符合。您需要从ObservableSet返回一个Callable,例如:

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

10-05 17:39