Java 维护过滤的可观察列表最基本的方法是什么?
假设您有一个基本类型的对象列表(在我的例子中是,Java 维护过滤的可观察列表最基本的方法是什么?,java,collections,javafx,Java,Collections,Javafx,假设您有一个基本类型的对象列表(在我的例子中是,NotebookEntry),该列表包含各种后代类型的对象(如NotebookEntryPlainText)。此主列表由笔记本管理器维护,但各种控件需要从主列表创建自己的筛选列表,例如,仅纯文本条目。这些列表必须包括主列表中所有适用的条目,但如果从主列表中删除条目,则这些列表不得包含该条目 我提出了一个扩展ListBinding的绑定,它避免了实现任何监听器。装订是单向的 代码非常简单: public class ObservableFiltere
NotebookEntry
),该列表包含各种后代类型的对象(如NotebookEntryPlainText
)。此主列表由笔记本管理器维护,但各种控件需要从主列表创建自己的筛选列表,例如,仅纯文本条目。这些列表必须包括主列表中所有适用的条目,但如果从主列表中删除条目,则这些列表不得包含该条目
我提出了一个扩展ListBinding
的绑定,它避免了实现任何监听器。装订是单向的
代码非常简单:
public class ObservableFilteredList<T> extends ListBinding<T>
{
private final ObservableList<T> masterlist;
private final Predicate<T> predicate;
public ObservableFilteredList(ObservableList<T> _masterlist, Predicate<T> _p)
{
masterlist = _masterlist;
predicate = _p;
super.bind(masterlist);
}
@Override
public void dispose()
{
super.unbind(masterlist);
}
@Override
protected ObservableList<T> computeValue()
{
return FXCollections.observableList(
masterlist.parallelStream()
.filter(predicate)
.collect(Collectors.toList())
);
}
}
公共类ObservableFilteredList扩展ListBinding
{
私人最终观察者总名单;
私有最终谓词;
公共ObservableFilteredList(ObservableList _masterlist,谓词_p)
{
主列表=_主列表;
谓词=_p;
超级绑定(主列表);
}
@凌驾
公共空间处置()
{
super.unbind(主列表);
}
@凌驾
受保护的可观察列表计算值()
{
返回FXCollections.observableList(
masterlist.parallelStream()
.filter(谓词)
.collect(收集器.toList())
);
}
}
这是实现此功能最优雅的方式吗?这已经在JDK 8中实现了吗?我已经看过了,但也许我没有用正确的问题来寻找
示例实现:
ObservableList<String> sourcelist;
ObservableFilteredList<String> filteredlist;
sourcelist = FXCollections.observableArrayList();
listview_source.setItems(sourcelist);
filteredlist = new ObservableFilteredList<String>(sourcelist, s -> s.toUpperCase().startsWith("O"));
listview_filtered.setItems(filteredlist);
observeListSourceList;
ObservableFilteredList filteredlist;
sourcelist=FXCollections.observableArrayList();
listview_source.setItems(sourcelist);
filteredlist=新的ObservableFilteredList(sourcelist,s->s.toUpperCase().StartWith(“O”);
listview_filtered.setItems(filteredlist);
此实现的缺点是什么?是的,它已经实现了,称为,您可以使用
或者,您可以创建自己的
FilteredList
包装现有的observeList
+设置正确。它一直在上下文菜单中盯着我看。