Фильтрация данных с использованием лямбда-функций из файла json для хранения в таблице JavaFX - PullRequest
0 голосов
/ 03 мая 2019

Я создаю информационную панель BI для продаж автомобилей, используя данные, хранящиеся в json. Я хочу, чтобы данные были отфильтрованы для отображения на графиках и в таблице. Графики работали нормально

Вот как данные фильтруются для линейного графика:

 private void createLineChart() {
    lineChart.getData().clear();

    for (CheckBox checkBox : checkBoxes) {
        if (checkBox.isSelected()) {
            XYChart.Series series = new XYChart.Series();
            series.setName(checkBox.getText());

            //lambda function to aggregate data
            carSales.stream().filter(o -> o.getVehicle().equals(VEHICLE2)).filter(o -> o.getYear().equals(Integer.valueOf(checkBox.getText()))).forEach(o -> {
                series.getData().add(new XYChart.Data<>(o.getRegion(), o.getQuantity()));              

            });              
            lineChart.getData().add(series);
            lineChart.setTitle(VEHICLE2 + " Sales by Region");
        }
    }
}

Я пробовал аналогичный способ сделать это для таблицы, но он не принимает новый Sales.getYear (). Add line:

    private void populateTable(){

    year.setCellValueFactory(new PropertyValueFactory<>("Year"));
    quarter.setCellValueFactory(new PropertyValueFactory<>("QTR"));
    region.setCellValueFactory(new PropertyValueFactory<>("Region"));
    vehicle.setCellValueFactory(new PropertyValueFactory<>("Vehicle"));
    quantity.setCellValueFactory(new PropertyValueFactory<>("Quantity"));

    for (CheckBox checkBox : checkBoxes) {
        if (checkBox.isSelected()) {

            ObservableList<Sales> oList = FXCollections.observableArrayList(
                new Sales.getYear().add("Year", carSales.stream().filter(o -> o.getVehicle().equals(VEHICLE))));

            salesTable.setItems(oList);
        }
    }

}

Флажки определяют, какие данные отображаются в линейном графике, и я хочу, чтобы это были фактические данные из линейного графика, которые будут отображаться в таблице.

Я объявил переменные таблицы и назначил их полям данных в моем классе Sales.java (с получателями), используя setCellValueFactory () выше.

@FXML
private TableView<Sales> salesTable;
@FXML private TableColumn<Sales, Integer> year;
@FXML private TableColumn<Sales, Integer> quarter;
@FXML private TableColumn<Sales, String> region;
@FXML private TableColumn<Sales, Integer> quantity;
@FXML private TableColumn<Sales, String> vehicle;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO


            dashService = new DashService();
            dashService.setAddress("http://150.204.48.59/DashService/SGetSales");
            dashService.setOnSucceeded(new EventHandler<WorkerStateEvent>() {

        @Override
        public void handle(WorkerStateEvent e) {

            markup = e.getSource().getValue().toString();                
            carSales = (new Gson()).fromJson(markup, new TypeToken<LinkedList<Sales>>() {}.getType());

            years = carSales.stream().map(o -> o.getYear()).distinct().collect(Collectors.toList());

            toggleBW();
            displaySales();
            Sales2017();
            Sales2018();


            initClock();
            constructCheckBoxes();
        }    
    });

    dashService.start();
}

обрабатывать и инициализировать методы выше, как я могу хранить данные в таблице таким образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...