【发布时间】:2014-07-31 04:36:16
【问题描述】:
我有一个充满目标的 ObservableList。我不在乎原始列表的顺序是什么。我正在使用排序列表来处理排序。
对于这个特定的列表,我让比较器根据目标的大小级别进行排序。在第一种情况下,目标一
现在,如果我通过原始列表或直接通过目标更改幅度,排序列表将不会自行排序。
但是,如果我使用排序列表中的 set() 方法,它会自行排序。没有其他方法可以设置字段并让排序列表自行排序吗?
我想对原始列表进行更改,并让排序后的列表实现这一点。
ObservableList<Objective> list = FXCollections.observableArrayList();
Objective one = new Objective(), two = new Objective();
one.setMagnitude(10);
two.setMagnitude(5);
list.addAll(one, two);
SortedList<Objective> sorted = new SortedList<Objective>(list,
(Comparator<? super Objective>) (Objective x, Objective y) -> {
int first = x.getMagnitude();
int second = y.getMagnitude();
if (first > second)
return 1;
else if (second > first)
return -1;
else
return 0;
});
System.out.println("SortedList:" + sorted.toString());
list.get(0).setMagnitude(1);
list.get(1).setMagnitude(50);
System.out.println("SortedList:" + sorted.toString());
System.out.println("Source List:" + list.toString());
SortedList:[5, 10]
SortedList:[50, 1]
Source List:[1, 50]
【问题讨论】:
-
如果你修改
sorted而不是list会发生什么。即使在开头打印list,也不会被排序。 -
在列表中添加一个监听器并在监听器实现中触发排序。
-
正如我上面所说,使用 sortedList.set() 实际上会修改源列表和排序列表。不同之处在于,使用 SortedList.set() 方法实际上会实时正确地对排序列表进行排序。我想在不使用该 set 方法的情况下达到相同的效果。我也尝试过手动触发 FXCollections.sort 和 sortedList.sort() ,但它们导致了错误。让我再试一次。
标签: java javafx sortedlist observablelist