集合按索引删除

时间:2015-09-09 07:15:25

标签: java collections

伙伴们如何使用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("");
}
}

3 个答案:

答案 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());

然后,您可以使用生成的Listitems列表中删除其中的所有元素...

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);}
                }