Java eliminando un objeto de una lista de matrices

Quiero eliminar / eliminar un objeto de una lista de matriz de objetos. ¿Funcionaría esto si mi clase fuera:

class bookings {
  public String getuser () {
    return user;
  }

  public Date getbooking() {
    return bookingDate;
  }

  private String user;
  private Date bookingDate;
}

y tenía una lista de arrays similar a:

ArrayList <bookings> book;


public void foo (String user, Date date) {
  for (bookings b : book) {
    if (user.equals(b.getuser()) && date.equals(g.getbooking()) book.remove(b);
  }
}

preguntado el 28 de agosto de 11 a las 02:08

@xdazz sí, he intentado hacer eso y el objeto en la lista todavía se imprime cuando lo intenté system.out.println(b.getUser()) -

b seguirá existiendo, pero no estará en la lista de matrices del libro. -

El nombre de la clase siempre comienza con una letra mayúscula. Cuanto más sólidos sean tus fundamentos, mejor programador serás, y nunca uses una palabra en plural para el nombre de la clase. Debe ser "Reservas", no "reservas" -

3 Respuestas

En primer lugar, no puede usar un bucle foreach for (bookings b : book) porque no le permitirá modificar la colección (lanzará una excepción).

Este código debería funcionar:

public void foo (String user, Date date) {
  for (Iterator<bookings> i = book.iterator(); i.hasNext();) {
    bookings b = i.next(); // Oops - forgot this line!
    if (user.equals(b.getuser()) && date.equals(b.getbooking())
        i.remove(); // Corrected this too!
  }
}

Tampoco estaría de más nombrar cosas usando convenciones de nomenclatura estándar y uso de mayúsculas:

class Booking {
    String getUser() ...
    Date getDate() ...
}

ArrayList<Booking> bookings;

Respondido 28 ago 11, 08:08

los b El objeto no está definido en esto, ¿debo reemplazar esto con i? - FHr

@Clark @Bohemian ¿cómo definiría yo? Lo intenté (bookings) i pero eso me está tirando un error - FHr

@FHr, ¿viste mi ejemplo? debe probar (reserva) i.next (); y las reservas se pueden omitir aquí. - Clark Bao

@Bohemian Probé tu método. ¡El uso de book.remove (b) causará java.util.ConcurrentModificationException! No votaré en contra. pero provocará engaños. - Clark Bao

FHr, Tu camino tendrá problemas.

java.util.ConcurrentModificationException

lo que significa que está modificando su colección al mismo tiempo tanto en su ciclo como en su eliminación.

Si desea conocer la causa raíz por la que ocurre el error.

Será mejor que mires esta publicación

¿Por qué java.util.Collection no define next (), hasNext () directamente?

Por lo tanto, utilice Iterator en su lugar.

 Iterator it = list.iterator();
        while(it.hasNext()){
            Object o = it.next();

            //check your object here such as equals, 
            //the safe way is to use Iterator here.
            it.remove();
        }

Puede refactorizarlo con el tipo de reserva en su iterador como Iterator<bookings>

contestado el 23 de mayo de 17 a las 14:05

Lo intenté de esta manera y cuando coloco dos System.out.println () antes y después de it.remove (), muestra que no se ha eliminado - FHr

"tendrá problema" - ¿qué problema? - MK.

if (user.equals(b.getuser()) && date.equals(g.getbooking()) { System.out.println(b.getUser()); book.remove(b); System.out.println(b.getUser()); } - FHr

@FHr necesita imprimir la lista, no b. Tu objetivo es eliminar b del libro. - Clark Bao

@Clark Bao sí y lo dije. Afirmas que su código tiene un problema, pero no dices cuál es. - MK.

Por favor, chequee esto: La interfaz de colección

Tenga en cuenta que Iterator.remove es la única forma segura de modificar una colección durante la iteración; el comportamiento no se especifica si la colección subyacente se modifica de cualquier otra forma mientras la iteración está en curso.

Respondido 28 ago 11, 07:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.