Java 更改字段后,SortedList不会保持排序状态
我有一个目标明确的观察者。我不在乎原始列表的顺序是什么。我使用排序列表来处理排序 对于这个特定的列表,我让比较器根据目标的大小级别进行排序。在第一种情况下,目标1<2 现在,如果我通过原始列表或直接通过目标更改大小,sortedlist将不会自行排序 但是,如果使用排序列表中的set方法,它将自行排序。是否没有其他方法来设置字段并使排序列表自行排序 我想对原始列表进行更改,并让已排序的列表实现这一点Java 更改字段后,SortedList不会保持排序状态,java,javafx,sortedlist,observablelist,Java,Javafx,Sortedlist,Observablelist,我有一个目标明确的观察者。我不在乎原始列表的顺序是什么。我使用排序列表来处理排序 对于这个特定的列表,我让比较器根据目标的大小级别进行排序。在第一种情况下,目标1
保持列表始终处于排序状态需要跟踪所有对象的更改,这是一个巨大的计算开销,在大多数任务中几乎没有好处
只有在对象比较功能稳定后,才能填充排序列表。如果修改了排序列表,会发生什么情况。即使在开始时打印列表,它也不会被排序。将侦听器添加到列表中,并在侦听器实现中触发排序。正如我前面所说,使用sortedList.set实际上会修改源列表和排序列表。不同之处在于,使用SortedList.set方法实际上可以实时正确地对已排序的列表进行排序。我希望在不使用set方法的情况下实现相同的效果。我还尝试手动触发FXCollections.sort和sortedList.sort,但它们导致了错误。让我再试一次。
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]