gpt4 book ai didi

java - 维护过滤后的ObservableList最基本的方法是什么?

转载 作者:行者123 更新时间:2023-12-01 12:15:31 34 4
gpt4 key购买 nike

假设您有一个基本类型的对象列表(在我的例子中为 NotebookEntry ),并且此列表包含各种后代类型的对象(例如 NotebookEntryPlainText )。这位大师ObservableList<NotebookEntry>由笔记本管理器维护,但各种控件需要从该主列表创建自己的过滤列表 - 例如,仅纯文本条目。这些列表必须包括主列表中所有适用的条目,但如果从主列表中删除某个条目,则这些列表不得包含该条目。

我想出了一个扩展 ListBinding 的绑定(bind),这避免了必须实现任何监听器。绑定(bind)是有意单向的。

代码很简单:

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())
);
}
}

这是实现这个功能最优雅的方式吗?这已经在 J​​DK 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);

这种实现有哪些缺点?

最佳答案

是的,它已经实现并被称为 FilteredList ,你可以通过以下方式获取它 ObservableList.filtered(Predicate)或者您可以创建自己的 FilteredList 包装现有的 ObservableList + 设置正确的 Predicate .

关于java - 维护过滤后的ObservableList最基本的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034189/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com