项目具有name
,price
,condition
属性。我想保留price
和condition
,但要替换name
。
目前,我通过创建新对象来解决此问题,但我认为这不是最佳选择。我只想更改ArrayList项目的一个字段
public void modify(String name) {
for (Item i : item) {
if (i.getName().equalsIgnoreCase(name)) {
int position = item.indexOf(i);
System.out.println("New name: ");
String newName = in.nextLine();
Item updated = new Item(newName, i.getPrice(), i.getCondition(), i.getSize());
item.set(position, updated);
}
}
}
答案 0 :(得分:7)
您不必在ArrayList
上插入新项目
public void modify(String name) {
for (Item i : item) {
if (i.getName().equalsIgnoreCase(name)) {
System.out.println("New name: ");
String newName = in.nextLine();
i.setName(newName);
}
}
}
假设您已经为每个字段设置了方法。然后您可以通过这种方式更新名称,价格,尺寸
答案 1 :(得分:6)
您可以在updateName
类中使用Item
方法,然后仅更新对象的名称:
item.get(index).updateName(newName);
item.get(index)
返回一个Item
对象,您可以在其上应用updateName
方法。
答案 2 :(得分:0)
实际上,找到项目后,您无需无故地遍历整个列表,因此最好将find方法作为静态函数提取到Item类中,例如
public void modify(String name) {
System.out.println("New name: ");
String newName = in.nextLine();
Item itemToModify = Item.findByName(item, name);
if(itemToModify != null) {
itemToModify.setName(newName);
} else {
System.out.println("Item not found with that name!");
}
}
Item.java
public static Item findByName(Collection<Item> items, String name) {
for(Item item : items) {
if(item.getName().equalsIgnoreCase(name)) {
return item;
}
}
return null;
}
想象一下,如果您的收藏集中有百万件商品,并且您想更新secong。您无需花费任何时间即可遍历剩余的999.998。