如果项目没有实际名称,如何从列表中删除项目?
我有一个包含名为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一个名字来调用。如果项目从未被识别,我怎么能有一个从列表中删除该特定项目的方法?有没有办法通过给对象一个名字来识别项目?
答案 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.