Вы можете создать Comparator
, сравнить по значению Y, а затем в обратном порядке:
data.sort(Comparator.comparing(XYChart.Data<String,Double>::getYValue).reversed());
Это рассортировать коллекцию как intented ,
Или вы можете вернуть новую коллекцию:
List<XYChart.Data<String,Double>> sortedData =
data.stream()
.sorted(Comparator.comparing(XYChart.Data<String,Double>::getYValue).reversed())
.collect(Collectors.toList());
EDIT
Для ясности, это полный пример:
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);
}
}
HTTP: // StackOverflow. com/a/26508466/2715404 Это моя структура данных кстати. – miniHessel
Вы должны указать тип аргументов для 'Data':' private final ObservableList> data'. –
, но затем «.collect (Collectors.toCollection (() -> FXCollections.observableArrayList())); failed – miniHessel