Java 更改字段后,SortedList不会保持排序状态

Java 更改字段后,SortedList不会保持排序状态,java,javafx,sortedlist,observablelist,Java,Javafx,Sortedlist,Observablelist,我有一个目标明确的观察者。我不在乎原始列表的顺序是什么。我使用排序列表来处理排序 对于这个特定的列表,我让比较器根据目标的大小级别进行排序。在第一种情况下,目标1

我有一个目标明确的观察者。我不在乎原始列表的顺序是什么。我使用排序列表来处理排序

对于这个特定的列表,我让比较器根据目标的大小级别进行排序。在第一种情况下,目标1<2

现在,如果我通过原始列表或直接通过目标更改大小,sortedlist将不会自行排序

但是,如果使用排序列表中的set方法,它将自行排序。是否没有其他方法来设置字段并使排序列表自行排序

我想对原始列表进行更改,并让已排序的列表实现这一点


保持列表始终处于排序状态需要跟踪所有对象的更改,这是一个巨大的计算开销,在大多数任务中几乎没有好处


只有在对象比较功能稳定后,才能填充排序列表。

如果修改了排序列表,会发生什么情况。即使在开始时打印列表,它也不会被排序。将侦听器添加到列表中,并在侦听器实现中触发排序。正如我前面所说,使用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]