Java удаление объекта из списка массивов - PullRequest
1 голос
/ 28 августа 2011

Я хочу удалить / удалить объект из массива списка объектов. Будет ли это работать, если мой класс был:

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

  public Date getbooking() {
    return bookingDate;
  }

  private String user;
  private Date bookingDate;
}

и у меня был arraylist, подобный:

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

Ответы [ 3 ]

2 голосов
/ 28 августа 2011

Во-первых, вы не можете использовать цикл foreach for (bookings b : book), потому что он не позволит вам изменить коллекцию (это вызовет исключение).

Этот код должен работать:

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!
  }
}

Не мешало бы назвать вещи, используя стандартные соглашения об именах и заглавные буквы:

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

ArrayList<Booking> bookings;
1 голос
/ 28 августа 2011

FHr, ваш путь будет иметь проблемы.

java.util.ConcurrentModificationException

, что означает, что вы изменяете свою коллекцию одновременно и в цикле, и в удалении.

Если вы хотите узнать причину, по которой возникает ошибка.

Вылучше заглянуть в этот пост

Почему java.util.Collection не определяет сразу next (), hasNext ()?

Поэтому, пожалуйста, используйте Iterator вместо этого.

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

Вы можете выполнить рефакторинг с типом заказов в вашем итераторе, например Iterator<bookings>

0 голосов
/ 28 августа 2011

Пожалуйста, проверьте это: Интерфейс сбора

Обратите внимание, что Iterator.remove - единственный безопасный способ изменить коллекцию во время итерации; Поведение не определено, если базовая коллекция изменена любым другим способом во время выполнения итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...