Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ObservableList从高到低排序-javafx_Javafx - Fatal编程技术网

将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());