添加重复项时如何更新 TableView 中的行(而不是添加新行)? [JavaFX]

How do you update a row (rather than add a new row) in a TableView when duplicate items are added? [JavaFX]

将项目添加到显示在 TableView 中的 ObservableList 时,如何在添加重复项目时更新行?

例如考虑一个包含三列的 TableView:商品、数量和价格。这可以通过以下代码实现:

@FXML
TableColumn itemColumn;
@FXML
TableColumn qtyColumn;
@FXML
TableColumn priceColumn;

TableView orderTable;
ObservableList orderList = FXCollections.observableArrayList();


public void addItem(String a, int b, Double c) {
    Item entry = new Item(a, b, c);
    currentOrderTable.getItems().add(entry);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
    itemColumn.setCellValueFactory(new PropertyValueFactory<Item, Integer>("item"));
    qtyColumn.setCellValueFactory(new PropertyValueFactory<Item, String>("quantity"));
    priceColumn.setCellValueFactory(new PropertyValueFactory<Item, Double>("price"));
    orderTable.setItems(orderList);
}

在目前的形式中,您可能会得到这样的 table:

项目 -------- 数量 ----- 价格.
炒面 ----- 1 ---------- 4.20 .
泰式炒粉 ------ 1 ---------- 5.50 .
炒面 ----- 1 ---------- 4.20 .
泰式炒粉 ------ 1 ---------- 5.50.

但我要找的是 table 这样的:

项目 -------- 数量 ----- 价格.
炒面 ----- 1 ---------- 8.40 .
泰式炒河粉 ------ 1 ---------- 11.00。

扫描 table 的项目以查看是否存在现有项目:

public void addItem(String itemName, int quantity, Double price) {

    Item entry = currentOrderTable.getItems().stream()
        .filter(item -> item.getItem().equals(itemName))
        .findAny()
        .orElseGet(()-> {
             Item newItem = new Item(itemName, 0, 0);
             currentOrderTable.getItems().add(newItem);
             return newItem ;
        });

    entry.setQuantity(entry.getQuantity() + quantity)
    entry.setPrice(entry.getPrice() + price);


}