更新ArrayList项的特定属性

时间:2019-01-29 08:44:39

标签: java arraylist

项目具有namepricecondition属性。我想保留pricecondition,但要替换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);

        }
    }
}

3 个答案:

答案 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。