从ArrayList java中删除某个对象
我在Java上有一个ArrayList来存储工厂的几个订单。这些命令有几个atributes,其中包括idPedido。 问题是,如果我声明订单1、2和3,则通过名为bajaPedido的方法删除订单2,如下所示:从ArrayList java中删除某个对象,java,Java,我在Java上有一个ArrayList来存储工厂的几个订单。这些命令有几个atributes,其中包括idPedido。 问题是,如果我声明订单1、2和3,则通过名为bajaPedido的方法删除订单2,如下所示: public void bajaPedido(){ try{ idPedido=teclado.nextInt(); listaPedidos.remove(idPedido); }catch(
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 = teclado.nextInt();
for(Iterator<Order> itr = listaPedidos.iterator(); itr.hasNext();){
Order order = itr.next();
if(order.getId() == idPedido){
itr.remove();
}
}
然后,第三个顺序将位于数组的第二位,因为在这种情况下,idPedido指的是数组的位置,而不是对象中存储的变量
问题是,如果我输入id,它将向上搜索包含该id的对象并将其删除,而不是删除该id所对应的位置,那么如何对其进行编码呢?使用迭代器,如下所示:
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 = teclado.nextInt();
for(Iterator<Order> itr = listaPedidos.iterator(); itr.hasNext();){
Order order = itr.next();
if(order.getId() == idPedido){
itr.remove();
}
}
如果listaPedidos中所有订单的id都是唯一的,则使用break;在itr后移除;为了获得更好的性能,即即使在删除所需订单后也能防止循环运行 使用迭代器,如下所示:
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 = teclado.nextInt();
for(Iterator<Order> itr = listaPedidos.iterator(); itr.hasNext();){
Order order = itr.next();
if(order.getId() == idPedido){
itr.remove();
}
}
如果listaPedidos中所有订单的id都是唯一的,则使用break;在itr后移除;为了获得更好的性能,即即使在删除所需订单后也能防止循环运行 我认为最简单的方法是使用地图而不是列表,其中的键应该是idPedido并为pedido对象赋值
Map<Integer, Pedido> map = new HashMap<>();
map.put(idPedido, Pedido);
map.remove(idPedido);
在这种情况下,您必须在Pedido类上实现equals方法
我认为最简单的方法是使用地图而不是列表,其中的关键应该是您的idPedido并为pedido对象赋值
Map<Integer, Pedido> map = new HashMap<>();
map.put(idPedido, Pedido);
map.remove(idPedido);
在这种情况下,您必须在Pedido类上实现equals方法
您可以通过使用流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();
我希望它能起作用。您可以通过使用流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();
我希望它能起作用。哦,我明白了,现在我明白了地图是如何使用的,它比使用列表更有意义。我可能会使用你提出的第二种方法,因为我缺乏使用地图的经验,而且我的日程安排很紧。非常感谢,伙计!哦,我明白了,现在我明白了地图是如何使用的,这比使用列表更有意义。我可能会使用你提出的第二种方法,因为我缺乏使用地图的经验,而且我的日程安排很紧。非常感谢,伙计!这也是一种有趣的方法,多亏了你和Jordi,现在我对如何使用阵列有了更好的了解。谢谢!不客气。这是从列表中删除项目的推荐方法。刚刚尝试过,它确实有效,现在我可以用它重新编写一些方法。说真的,非常感谢!这也是一种有趣的方法,多亏了你和Jordi,现在我对如何使用阵列有了更好的了解。谢谢!不客气。这是从列表中删除项目的推荐方法。刚刚尝试过,它确实有效,现在我可以用它重新编写一些方法。说真的,非常感谢!我正在使用Arvind建议的,但是,尽管如此,非常感谢您的回复和对stream api的后见之明,这也是一个很好的工具!我正在使用Arvind建议的,但是,尽管如此,非常感谢您的回复和对stream api的后见之明,这也是一个很好的工具!