将ObservableList从高到低排序-javafx
有没有办法根据从高到低的值对可观察列表进行排序 说我有一个将ObservableList从高到低排序-javafx,javafx,Javafx,有没有办法根据从高到低的值对可观察列表进行排序 说我有一个 ObservableList<XYChart.Data> data; 可观察列表数据; 包含字符串和双精度的。我希望列表按照从最高值到最低值的双精度排序。我之所以要这样做,是因为如果图表的值是从最高到最低显示的,那么图表看起来会更好 我现在有这样的东西: sortedData = new SortedList<>(data); sortedData.comparatorProperty().bind(myco
ObservableList<XYChart.Data> data;
可观察列表数据;
包含字符串和双精度的。我希望列表按照从最高值到最低值的双精度排序。我之所以要这样做,是因为如果图表的值是从最高到最低显示的,那么图表看起来会更好
我现在有这样的东西:
sortedData = new SortedList<>(data);
sortedData.comparatorProperty().bind(mycomparatorProperty());
sortedData=新的分类列表(数据);
sortedData.comparatorProperty().bind(mycomparatorProperty());
您可以创建一个比较器,按Y值进行比较,然后颠倒顺序:
data.sort(Comparator.comparing(XYChart.Data<String,Double>::getYValue).reversed());
data.sort(Comparator.comparing(XYChart.data::getYValue.reversed());
这将按预期对您的收藏进行排序
或者,您可以返回一个新集合:
List<XYChart.Data<String,Double>> sortedData =
data.stream()
.sorted(Comparator.comparing(XYChart.Data<String,Double>::getYValue).reversed())
.collect(Collectors.toList());
列表排序数据=
data.stream()
.sorted(Comparator.comparing(XYChart.Data::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);
}
}
public类FXMain扩展应用程序{
私有最终可观察列表数据=
FXCollections.observableArrayList(
新XYChart.数据(“P1”,200d),
新XYChart.数据(“P2”,150d),
新的XYChart.数据(“P3”,250d);
@凌驾
公共无效开始(阶段primaryStage){
按钮btn=新按钮“排序数据!”);
btn.设置动作(e->{
可观察列表数据2=
data.stream()
.分类(比较)。
比较(XYChart.Data::getYValue).reversed())
.peek(System.out::println)
.collect(Collectors.toCollection(()->FXCollections.observearraylist());
});
StackPane root=新的StackPane();
root.getChildren().add(btn);
场景=新场景(根,300,250);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
您应该指定数据的参数类型
:私有最终ObservableList数据
。但是然后“.collect(collector.toCollection(()->FXCollections.observableArrayList());”fails我实际收到此错误:Comperator无法转换为Comperator或者我正在用我的类编辑我的答案,所以你可以看到我是如何做到的。我修复了它,改为.map(entry->new XYChart.Data(entry.getKey(),entry.getValue()).collector(Collectors.toCollection(()->FXCollections.observearraylist());