Objectives で満たされた ObservableList があります。元のリストの順序は気にしません。並べ替えを処理するために並べ替えられたリストを使用しています。
この特定のリストでは、目的のマグニチュード レベルに従ってコンパレータを並べ替えます。最初のケースでは、目標 1 < 2 です。
ここで、元のリストまたは目標を介して直接マグニチュードを変更すると、sortedlist 自体はソートされません。
ただし、並べ替えられたリストから 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]