0

我有一个充满目标的 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]
4

1 回答 1

0

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

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

于 2014-07-31T04:48:41.263 回答