有没有办法根据从高到低的值对ObservableList进行排序?
说我有一个
ObservableList<XYChart.Data> data;
包含String和Double。我希望列表根据Double从最高到最低值排序。我想要这个的原因是因为如果从最高到最低显示它们的值,图表看起来会更好。
我现在有这样的事情:
sortedData = new SortedList<>(data);
sortedData.comparatorProperty().bind(mycomparatorProperty());
答案 0 :(得分:3)
您可以创建Comparator
,按Y值进行比较,然后按顺序反转:
data.sort(Comparator.comparing(XYChart.Data<String,Double>::getYValue).reversed());
这会根据您的意愿对您的收藏品进行排序。
或者您可以返回新的收藏品:
List<XYChart.Data<String,Double>> sortedData =
data.stream()
.sorted(Comparator.comparing(XYChart.Data<String,Double>::getYValue).reversed())
.collect(Collectors.toList());
修改强>
为了清楚起见,这是一个完整的样本:
public class FXMain extends Application {
private final ObservableList<XYChart.Data<String,Double>> data =
FXCollections.observableArrayList(
new XYChart.Data("P1",200d),
new XYChart.Data("P2",150d),
new XYChart.Data("P3",250d));
@Override
public void start(Stage primaryStage) {
Button btn = new Button"Sort data!");
btn.setOnAction(e -> {
ObservableList<XYChart.Data<String,Double>> data2 =
data.stream()
.sorted(Comparator.
comparing(XYChart.Data<String,Double>::getYValue).reversed())
.peek(System.out::println)
.collect(Collectors.toCollection(()->FXCollections.observableArrayList()));
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}