2016-12-10 14 views
1

Когда вы добавляете элемент в ObservableList, который отображается в TableView, как вы можете обновить строку при добавлении дублирующего элемента?Как вы обновляете строку (а не добавляете новую строку) в TableView при добавлении повторяющихся элементов? [JavaFX]

например. Рассмотрим TableView с тремя столбцами: item, количеством и ценой. Это может быть достигнуто с помощью следующего кода:

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

В своей нынешней форме, вы могли бы в конечном итоге с таблицей, как это:

пункт --------- количество ----- цена.
Chow Mein ----- 1 ----------- 4.20.
Pad Thai -------- 1 ----------- 5.50.
Chow Mein ----- 1 ----------- 4.20.
Pad Thai -------- 1 ----------- 5.50.

Но то, что я ищу, это таблица, как это:

вещь --------- количество ----- цена.
Chow Mein ----- 1 ----------- 8.40.
Pad Thai -------- 1 ---------- 11.00.

ответ

0

Сканирование через пункты таблицы, чтобы увидеть, если есть существующий пункт:

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


} 
+0

Это здорово. Огромное спасибо. – mrchimpbanana