java tablesaw 分组求和
时间: 2024-09-30 12:12:58 浏览: 42
`TableSaw` 是 JavaFX 中的一个强大的数据可视化库,它提供了一个灵活的方式来处理表格数据,包括分组、排序和计算汇总等操作。如果你想要使用 `TableSaw` 对数据进行分组并求和,你可以按照以下步骤操作:
1. **创建 TableSaw 表格**:
首先,你需要创建一个 `Table` 或者 `TableView` 来显示数据。这可以通过 `TableSaw` 的 `TableBuilder` 类来构建,或者从现有的数据源(如 List、ObservableList 或数据库查询结果)初始化。
```java
import com.jfoenix.skins.JFXSkin;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import com.tableausoftware.api.java.impl.Tablesaw;
// 假设你有一个 List 数据
List<DataRow> dataRows = ...; // 这里 DataRow 是自定义的数据模型类
TableView<DataRow> table = new TableView<>();
table.getSkin().setAll(new JFXSkin<>(table));
// 添加列
TableColumn<DataRow, String> column1 = new TableColumn<>("Column1");
column1.setCellValueFactory(cellData -> cellData.getValue().getColumn1Property());
table.getColumns().add(column1);
// 添加其他列...
// 初始化数据
table.getItems().setAll(dataRows);
```
2. **分组和求和**:
使用 `Tablesaw` 提供的 `groupBy()` 方法可以对表中的数据进行分组,然后用 `sum()` 函数计算每个组的某列数值之和。例如,假设你想根据 "Column1" 列分组并对 "Column2" 列求和:
```java
Map<String, Double> groupSum = dataRows.stream()
.collect(Collectors.groupingBy(DataRow::getColumn1, Collectors.reducing(0.0, DataRow::getColumn2, Double::sum)));
```
这将返回一个 Map,其中键是 "Column1" 的值,值是对应 "Column2" 的总和。
3. **显示结果**:
如果你想要在 UI 上展示这些汇总信息,你可以添加一个新的 `TableRow` 或者动态生成新的 `TableView` 来显示结果。
```java
table.getItems().addAll(groupSum.entrySet().stream()
.map(entry -> new TableRow<>(entry.getKey(), entry.getValue()))
.collect(Collectors.toList()));
```
阅读全文