限制 ObservableList 的大小
Limit size of an ObservableList
我被迫在 JavaFx 应用程序中使用 ObservableList
,我的 List
必须包含最多 1000 个项目。
所以我想使用 FIFO 系统,但我只看到这个解决方案:
observableListData.add(...) //1001 item
if (observableListData.size()>1000){
observableListData.remove(0); // 1000 item
}
我在此列表中添加了很多项目,所以我认为这不是限制我的 ObservableList
大小的最佳方法,是否有 另一种方法可以做到这一点 ?
编辑:
回答你的一些问题:
- 我需要
ObservableList
因为它是 link 到 ListView
。
- 我必须使用 FIFO,因为我显示此列表的项目
无法告诉 ObservableList 本身限制它的大小。
这里是 link 到 class 和所有方法的详细信息:
https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableList.html
能否请您告诉我们您要制作什么,为什么需要限制大小?也许有人会告诉您更好的解决方案。
如何对其进行子类化并重写 add 方法。在覆盖的方法中使用您的 if 语句。
您可以扩展 ModifiableObservableListBase
,它是集合的基础,由 FXCollections.observableList
返回,这样:
public class ObservableLimitedList<T> extends ModifiableObservableListBase<T> {
private LinkedList<T> list;
private int maxSize;
public ObservableLimitedList(int maxSize) {
this.maxSize = maxSize;
list = new LinkedList<>();
}
@Override
public boolean add(T element) {
boolean result = super.add(element);
if (size() > maxSize) {
remove(0);
}
return result;
}
// delegate overrides:
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
@Override
protected void doAdd(int index, T element) {
list.add(index, element);
}
@Override
protected T doSet(int index, T element) {
return list.set(index, element);
}
@Override
protected T doRemove(int index) {
return list.remove(index);
}
}
下面是这个实现的测试:https://ideone.com/MMhnS6
我被迫在 JavaFx 应用程序中使用 ObservableList
,我的 List
必须包含最多 1000 个项目。
所以我想使用 FIFO 系统,但我只看到这个解决方案:
observableListData.add(...) //1001 item
if (observableListData.size()>1000){
observableListData.remove(0); // 1000 item
}
我在此列表中添加了很多项目,所以我认为这不是限制我的 ObservableList
大小的最佳方法,是否有 另一种方法可以做到这一点 ?
编辑:
回答你的一些问题:
- 我需要
ObservableList
因为它是 link 到ListView
。 - 我必须使用 FIFO,因为我显示此列表的项目
无法告诉 ObservableList 本身限制它的大小。
这里是 link 到 class 和所有方法的详细信息:
https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableList.html
能否请您告诉我们您要制作什么,为什么需要限制大小?也许有人会告诉您更好的解决方案。
如何对其进行子类化并重写 add 方法。在覆盖的方法中使用您的 if 语句。
您可以扩展 ModifiableObservableListBase
,它是集合的基础,由 FXCollections.observableList
返回,这样:
public class ObservableLimitedList<T> extends ModifiableObservableListBase<T> {
private LinkedList<T> list;
private int maxSize;
public ObservableLimitedList(int maxSize) {
this.maxSize = maxSize;
list = new LinkedList<>();
}
@Override
public boolean add(T element) {
boolean result = super.add(element);
if (size() > maxSize) {
remove(0);
}
return result;
}
// delegate overrides:
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
@Override
protected void doAdd(int index, T element) {
list.add(index, element);
}
@Override
protected T doSet(int index, T element) {
return list.set(index, element);
}
@Override
protected T doRemove(int index) {
return list.remove(index);
}
}
下面是这个实现的测试:https://ideone.com/MMhnS6