伙伴们如何使用remove(object);
按用户输入的 id 删除元素。我不知道如何实现indexOf(object);
因为我的论点中有很多变量我不能这样做indexOf(id);
remove(indexOf(id));
教我如何。
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
List<Item> items = new ArrayList<>();
while (true) {
System.out.println("ITEM MANAGEMENT");
lineBreak(20, "*");
System.out.println("[1] - Add Item");
System.out.println("[2] - Delete Item");
System.out.println("[3] - Edit Item");
System.out.println("[4] - List All Items");
System.out.println("[5] - View Item");
System.out.println("[6] - Exit");
lineBreak(20, "-");
System.out.print("Enter your choice>> ");
int choice = s.nextInt();
int id;
String name, des;
float price;
Item i;
switch(choice){
case 1:
System.out.print("INPUT ID: ");
id = s.nextInt();
s.nextLine(); //trap
System.out.print("INPUT NAME: ");
name = s.nextLine();
System.out.print("INPUT DESCRIPTION: ");
des = s.nextLine();
System.out.print("INPUT PRICE: ");
price = s.nextFloat();
i = new Item(id,price,name,des);
items.add(i);
break;
case 2:
System.out.println("ENTER ID: ");
break;
case 3:
System.out.println("ENTER ID: ");
break;
case 4:
System.out.printf("%-10s%-10s%10s\n","ID","NAME","PRICE");
lineBreak(20," -");
for(Item item: items){
System.out.printf("%-10d%-10s%10.2f\n",item.getId(),item.getName(),item.getPrice());
}
break;
case 5:
System.out.println("ENTER ID: ");
break;
case 6:
System.exit(1);
default:
System.out.println("Invalid Input!");
}
}
}
public static void lineBreak(int n, String ch) {
for (int i = 0; i < n; i++) {
System.out.print(ch);
}
System.out.println("");
}
}
答案 0 :(得分:0)
您应使用地图<Integer, Item>
代替列表来存储项对象。在地图中,您可以按给定的 ID 获取项,并从地图中删除项对象。< / p>
如果您只需要使用列表,那么每次从列表中删除项目时,您都需要遍历列表。您可以使用以下代码删除列表中的项。假设您在项类中有getId()
方法。
Iterator<Item> itemIterator = items.iterator();
int id = s.nextInt();
while (itemIterator.hasNext()) {
Item item = itemIterator.next();
if (item.getId() == id) {
itemIterator.remove();
break;
}
}
答案 1 :(得分:0)
鉴于您当前的实现,您需要循环遍历列表并找到匹配Item
id
(s)
像...一样的东西。
int deleteId = s.nextInt();
Iterator<Item> it = items.iterator();
while (it.hasNext()) {
Item next = it.next();
if (next.getId() == deleteId) {
it.remove();
}
}
同样,您也可以利用Java 8的流支持并执行类似......
的操作int deleteId = s.nextInt();
List<Item> results = items.stream().filter((Item t) -> { return t.getId() == deleteId; }).collect(Collectors.toList());
然后,您可以使用生成的List
从items
列表中删除其中的所有元素...
items.removeAll(results);
*另一种可能性
是找到与所需ID匹配的第一个Item
...
int deleteId = s.nextInt();
Item item = list.stream().filter(x ->
{
return x.getId() == deleteId;
})
.findFirst()
.get();
if (item != null) {
items.remove(item);
}
答案 2 :(得分:-1)
这就是我所做的事情,以便将输入的ID与对象中的ID进行比较。 它工作!
id = s.nextInt();
for(Item itm: items){
if(id == itm.getId()){items.remove(itm);}
}