使用Lambda函数从json文件过滤数据以存储在表JavaFX中

时间:2019-05-03 16:17:59

标签: json javafx

我正在使用存储在json中的数据创建用于汽车销售的BI仪表板。我希望过滤数据以显示在图表和表格中。图表运行良好

这是折线图数据的过滤方式:

 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行:

    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);
        }
    }

}

复选框确定折线图中显示哪些数据,我希望它是折线图中要显示在表中的实际数据。

我已经声明了表变量,并使用上面的setCellValueFactory()将它们分配给我的Sales.java类(带有吸气剂)中的数据字段。

@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();
}

上面的处理和初始化方法,如何用这种方式将数据存储在表中?

0 个答案:

没有答案