[英]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.