如何删除或更新 ObservableList 中的特定行
How to remove or update certain row in ObservableList
我在使用单个元素检测、删除和更新列表中的特定行时遇到问题。
如果我只知道一个元素 "Corn",我该如何将其从列表中删除。
如果我想将价格为 1.49 的所有产品更新为 2.49,还有如何操作。
ObservableList<Product> products = FXCollections.observableArrayList();
products.add(new Product("Laptop", 859.00, 20));
products.add(new Product("Bouncy Ball", 2.49, 198));
products.add(new Product("Toilet", 9.99, 74));
products.add(new Product("The Notebook DVD", 19.99, 12));
products.add(new Product("Corn", 1.49, 856));
products.add(new Product("Chips", 1.49, 100));
if (products.contains("Corn")){
System.out.println("True");
}
else System.out.println("False");
class Product {
Product(String name, Double price, Integer quantity) {
this.name = name;
this.price = price;
this.quantity = quantity;
}
private String name;
private Double price;
private Integer quantity;
}
谢谢
使用普通的 Iterator
for this. You will also need to create getters and setters.
for (Iterator i = products.iterator(); i.hasNext();)
Product p = i.next();
if (p.getName().equals("Corn")) {
i.remove();
} else if (p.getPrice() == 1.49) {
p.setPrice(2.49);
}
}
您可以使用 Java 8 的函数类型以获得简洁、可读的代码:
products.removeIf(product -> product.name.equals("Corn"));
products.forEach(product -> {
if (product.price == 1.49) product.price = 2.49;
});
如果要检索具有特定条件的所有产品,请执行以下操作:
products.stream().filter(product -> /* some condition */).collect(Collectors.toList());
此外,您可以简单地使用普通 Iterator
:
for (Iterator<Product> i = products.iterator(); i.hasNext();) {
Product product = i.next();
if (product.name.equals("Corn")) i.remove();
else if (product.price == 1.49) product.price = 2.49;
}
根据Effective Java,尽量限制变量的范围——避免在循环外声明迭代器。
您不能在此处使用 for-each 循环,因为在 for-each 循环中删除将导致 ConcurrentModificationException
.
我在使用单个元素检测、删除和更新列表中的特定行时遇到问题。 如果我只知道一个元素 "Corn",我该如何将其从列表中删除。
如果我想将价格为 1.49 的所有产品更新为 2.49,还有如何操作。
ObservableList<Product> products = FXCollections.observableArrayList();
products.add(new Product("Laptop", 859.00, 20));
products.add(new Product("Bouncy Ball", 2.49, 198));
products.add(new Product("Toilet", 9.99, 74));
products.add(new Product("The Notebook DVD", 19.99, 12));
products.add(new Product("Corn", 1.49, 856));
products.add(new Product("Chips", 1.49, 100));
if (products.contains("Corn")){
System.out.println("True");
}
else System.out.println("False");
class Product {
Product(String name, Double price, Integer quantity) {
this.name = name;
this.price = price;
this.quantity = quantity;
}
private String name;
private Double price;
private Integer quantity;
}
谢谢
使用普通的 Iterator
for this. You will also need to create getters and setters.
for (Iterator i = products.iterator(); i.hasNext();)
Product p = i.next();
if (p.getName().equals("Corn")) {
i.remove();
} else if (p.getPrice() == 1.49) {
p.setPrice(2.49);
}
}
您可以使用 Java 8 的函数类型以获得简洁、可读的代码:
products.removeIf(product -> product.name.equals("Corn"));
products.forEach(product -> {
if (product.price == 1.49) product.price = 2.49;
});
如果要检索具有特定条件的所有产品,请执行以下操作:
products.stream().filter(product -> /* some condition */).collect(Collectors.toList());
此外,您可以简单地使用普通 Iterator
:
for (Iterator<Product> i = products.iterator(); i.hasNext();) {
Product product = i.next();
if (product.name.equals("Corn")) i.remove();
else if (product.price == 1.49) product.price = 2.49;
}
根据Effective Java,尽量限制变量的范围——避免在循环外声明迭代器。
您不能在此处使用 for-each 循环,因为在 for-each 循环中删除将导致 ConcurrentModificationException
.