我想将ObservableMap的keySet转换为只读的ObservableSet。我不想复制该值,对ObservableMap的任何修改都必须影响Observable keySet。如果我将另一组绑定到可观察的键集内容,则其内容将自动更新。

这是我想写的。

ObservableMap<String, Object> map = FXCollections.observableHashMap();
ObservableSet<String> keySet = FXCollections.observableKeySet(map);
Set<String> boundSet = new HashSet<String>();
Bindings.bindContent(boundSet, keySet);
map.put("v", new Object());
assert boundSet.contains("v");

JavaFX SDK中有此功能吗?

最佳答案

您请求的功能不需要特殊的ObservableSet。它已经是Map接口合同的一部分:

ObservableMap<String, Object> map = FXCollections.observableHashMap();
Set<String> keySet = map.keySet();
map.put("v", new Object());
assert keySet.contains("v");
Map的键集始终反映出对背景图所做的更改。

http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#keySet--

返回此映射中包含的键的 Set 视图。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。

10-05 18:49