簡體   English   中英

從 ArrayList java 中刪除某個 object

[英]Delete a certain object from an ArrayList java

我在 Java 上有一個 ArrayList 來存儲來自工廠的幾個訂單。 這些訂單有幾個屬性,其中是idPedido 問題是,如果我聲明訂單 1、2 和 3,請通過名為bajaPedido的方法刪除訂單 2(如下所示):

public void bajaPedido(){
     try{
              idPedido=teclado.nextInt();
              listaPedidos.remove(idPedido); 
           }catch(InputMismatchException e){
               teclado.next();
              System.out.print("Debe utilizar números, por favor, repita el proceso");
           }catch(IndexOutOfBoundsException e){
               teclado.next();
               System.out.println("No existe un pedido con ese ID");
            }
    }

那么第三個順序將在數組的第二位,因為在這種情況下idPedido是指數組的 position,而不是存儲在 object 中的變量。

問題是,我該如何編碼,如果我輸入 id,它會搜索哪個 object 包含這樣的 id 並刪除它,而不是刪除 id 等於的 position?

使用Iterator ,如下所示:

idPedido = teclado.nextInt();
for(Iterator<Order> itr = listaPedidos.iterator(); itr.hasNext();){
    Order order = itr.next();
    if(order.getId() == idPedido){
        itr.remove();
    }
}

如果listaPedidos中所有訂單的id都是唯一的,使用break; itr.remove(); 為了獲得更好的性能(即即使在刪除所需的順序后也可以防止循環運行)。

我認為最簡單的方法是使用 Map 而不是列表,其中的關鍵應該是您的“idPedido”並重視“pedido 對象”。

Map<Integer, Pedido> map = new HashMap<>();
map.put(idPedido, Pedido);
map.remove(idPedido);

如果您仍想使用列表,則應使用列表接口中的此方法從“listaPedidos”中刪除“Pedido”對象,否則將不受列表索引的限制。

boolean remove(Object o)

在這種情況下,您必須在您的 Pedido class 上實現“等於”方法。

https://docs.oracle.com/javase/8/docs/api/java/util/List.html#remove-java.lang.Object-

您可以使用 stream api 來解決這個問題

List<Orders> orders= contain orders object
orders.stream().filter(item -> item.getIdPedido().equals("Your Id")).findFirst()
            .map(p -> {
                orders.remove(p);
                return p;
            }).get();

我希望它可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM