Не могу понять почему не удалается данные?

373
11 мая 2017, 11:00

Есть список и удаляю данные со значением busy но он оставляет 2-3 прля с этим значением .почему?

public class Metada {
    int id,metr;
    String name,curnumber,number,status;
    public Metada(int id, String name, int metr, String curnumber, String number, String status) {
        this.id = id;
        this.name = name;
        this.metr = metr;
        this.curnumber = curnumber;
        this.number = number;
        this.status = status;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getMetr() {
        return metr;
    }
    public void setMetr(int metr) {
        this.metr = metr;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCurnumber() {
        return curnumber;
    }
    public void setCurnumber(String curnumber) {
        this.curnumber = curnumber;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
}

Далее

  List<Metada> lst = new ArrayList<>();
    Metada mMetada;

...

 lst.add(new Metada(1,"jafar",236786785,"10-cu-345","055-444-33-33","busy"));
        lst.add(new Metada(2,"alo",8678678,"10-cu-645","055-444-33-33","busy"));
        lst.add(new Metada(3,"kazim",56786784,"10-cu-3453","055-444-33-33","free"));
        lst.add(new Metada(4,"serav",26688346,"10-cu-45645","055-444-33-33","free"));
        lst.add(new Metada(5,"farid",634634,"10-cu-6456","055-444-33-33","free"));
        lst.add(new Metada(6,"kulia",2363465,"10-cu-456004","055-444-33-33","busy"));
        lst.add(new Metada(7,"telm",457868678,"10-cu-064504","055-444-33-33","busy"));
        lst.add(new Metada(8,"tenn",26786735,"10-cu-0064564","055-444-33-33","free"));
        lst.add(new Metada(9,"tinton",287687635,"10-cu45645-004","055-444-33-33","busy"));
        lst.add(new Metada(10,"qaqa",2386785,"10-cu-004","055-444-33-33","free"));
        lst.add(new Metada(11,"koookk",267876835,"10-cu-0645604","055-444-33-33","busy"));
        lst.add(new Metada(12,"poy",26787685,"10-cu-004","6456055-444-33-33","free"));
        lst.add(new Metada(13,"telm",457868678,"10-cu-064504","055-444-33-33","busy"));
    lst.add(new Metada(14,"tenn",26786735,"10-cu-0064564","055-444-33-33","free"));
    lst.add(new Metada(15,"tinton",287687635,"10-cu45645-004","055-444-33-33","busy"));
    lst.add(new Metada(16,"qaqa",2386785,"10-cu-004","055-444-33-33","free"));
    lst.add(new Metada(17,"koookk",267876835,"10-cu-0645604","055-444-33-33","busy"));
    lst.add(new Metada(18,"poy",26787685,"10-cu-004","6456055-444-33-33","free"));

Удаляю элементы и вывожу.Но вот некоторые не удаляются !Почему?

 Log.d(TAG_LOG,"udalenie zanatix voditeley");
        for (int i =0;i<lst.size();i++){
            if (lst.get(i).getStatus().equals("busy")){
                lst.remove(i);
            }
        }
        Log.d(TAG_LOG,"Vivod posle udlenia zanatix");
        for (int i = 0;i<lst.size();i++){
            Log.d(TAG_LOG,"" +lst.get(i).getStatus());
    }

А вот и вывод сам.

05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: busy
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: busy
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
05-10 00:46:50.047 4277-4277/xyz.justart.aaaaaaaaaaaaaa D/Main Activity: free
Answer 1

Классически удалять надо с конца, т.к. индексы при удалении смещаются. По идее вы должны были получить IndexOutOfBoundsException. Это еще хорошо, что вы не используете "foreach", а то получили бы ConcurrentModificationException. Правильно через итератор, так:

Iterator<Metada> it = lst.iterator();
while (it.hasNext()){
    if (it.next().getStatus().equals("busy")){
        it.remove();
    }
}
READ ALSO
Java + Selenide. Не проходит элементарный тест

Java + Selenide. Не проходит элементарный тест

Впервые работаю с Java и Intelij idea, да и собственно с Селенидом тожеПрежде использовал с# со студией и побывал Селениум

371
Добавление файла в архив с помощью метода putNextEntry()

Добавление файла в архив с помощью метода putNextEntry()

Объясните пожалуйста, как происходит добавление объекта ZipEntry в архив с помощью метода putNextEntry() класса ZipOutputStream, так как я новичок не получается...

308
запуск web проекта на java выдает ошибку

запуск web проекта на java выдает ошибку

При запуске web проекта на java выдает ошибку

292