如果项目没有特定名称,如何从列表中删除项目?

时间:2016-04-26 14:17:10

标签: java class arraylist

如果项目没有实际名称,如何从列表中删除项目?

我有一个包含名为additem的方法的类,它添加了我在另一个类中构造的Item对象。 Item对象有两个参数:String name, String type,它们是项目的名称和项目的类型。以下是additem方法的代码:

public void additem(String name, String type){
    if("Weapon".equals(type)){
        itemlistweapons.add(new Item(name, type).toString());
    }
    else if ("Apparel".equals(type)){
        itemlistapparel.add(new Item(name, type).toString());
    }
    else if ("Aid".equals(type)){
        itemlistaid.add(new Item(name, type).toString());
    }
    else if ("Misc.".equals(type)){
        itemlistmisc.add(new Item(name, type).toString());
    }
}

所以,当我在主类的列表中添加一个项目时,我会这样做:

items list = new items();

list.additems("Itemname", "Itemtype");

所以我从来没有真正给Object一个名字来调用。如果项目从未被识别,我怎么能有一个从列表中删除该特定项目的方法?有没有办法通过给对象一个名字来识别项目?

4 个答案:

答案 0 :(得分:2)

为什么不这样: -

public void removeitem(String name, String type) {

String checkItem = new Item(name, type).toString();

  for(int i = itemslistaid.size(); i > 0 ; i--)  {
    if(itemslistaid.get(i).equalsIgnorecase(checkItem))
         itemslistaid.remove(i);
  }
}

答案 1 :(得分:0)

在java中,你为一个对象定义一个标识符以便再次引用它的方法是重写对象的equals()和hashCode()方法......这就是你可以告诉你什么对象的方法正在寻找其他

答案 2 :(得分:0)

使用地图来保存/查找并“命名”您的列表,然后它只是add()remove()方法中的一行代码,它会自动适应任意数量的命名列表:

private Map<String, List<String>> map = new HashMap<>();

public void additem(String name, String type) {
    map.computeIfAbsent(name, k -> new ArrayList<>()).add(type);
}

public void removeitem(String name, String type) {
    Optional.ofNullable(map.get(name)).ifPresent(l -> l.remove(type));
}

答案 3 :(得分:0)

在给定代码中,您将对象的字符串值添加到列表

itemlistweapons.add(new Item(name, type).toString());

哪个好。但如果是toString,则不会返回实际的字符串 您可以在override toString班级

中使用Item方法
    class Item{

    public String toString(){
    return name+""+type;
    }

    }

现在你返回一个实际的字符串,你可以改变它以返回你班上的任何字符串。

itemlistweapons.add(new Item(name, type).toString()); // this will contain string from toString method

itemlistweapons.remove(yourItem.toString); //this will remove item containing your string.