Как удалить конкретное значение из списка массивов, а также его следующие два значения на основе одного условия, используя итератор над массивом? - PullRequest
1 голос
/ 13 апреля 2019

У меня есть массив строкового типа в первых трех индексах. У меня есть деталь одного автомобиля, например

  • название автомобиля
  • модель
  • цена

и аналогично по следующим трем индексам у меня есть данные о другой машине. Теперь я хочу снять детали одной машины. Как я должен это сделать. Например, я перечислил carinfo

carinfo.add("abc");
carinfo.add("xyz");
carinfo.add("someprice");

Я использовал iterator.remove, но я могу удалить только имя машины первого значения, используя оператор if. Я также хочу удалить следующие два значения. пожалуйста, помогите мне.

Iterator<String> iterator = a.iterator();
while(iterator.hasNext())
{
    String value = iterator.next();
    if ("abc".equals(value))
    {
        iterator.remove();
        break;
    }
}

Ответы [ 3 ]

0 голосов
/ 13 апреля 2019

Он удаляет только первое значение, потому что оно единственное, которое соответствует вашему требованию оператора if. Если вы хотите удалить их все, вам просто нужно улучшить оператор if или удалить его.

На практике то, что вы делаете, это "abc".equals(value), и эта проверка верна только в первом элементе.

Примечание: Хорошей практикой здесь, поскольку вы используете Kotlin, было бы преобразовать ваш список в MutableList() и использовать функцию removeAll() из Kotlin

EDIT
Если вы должны удалить все элементы, вам также необходимо удалить break;.

0 голосов
/ 13 апреля 2019

Позволяет определить простое Car.

class Car {
    String name = "";
    String model = "";
    String price = "";

    public Car(String name, String model, String price) {
        this.name = name;
        this.model = model;
        this.price = price;
    }
}

Объявление интерфейса, который будет действовать как наш список автомобилей.

interface CarList {
    void addCar(Car car);
    void removeCar(Car car);
    void removeAll();
}

Реализация этого интерфейса с использованием реализации List<String>который следует тем же правилам, что и упомянутые в вопросе.

class MyCarList implements CarList {

    private final List<String> storage = new ArrayList<>();

    @Override
    public void addCar(Car car) {
        storage.add(car.name);
        storage.add(car.model);
        storage.add(car.price);
    }

    @Override
    public void removeCar(Car car) {
        int index = storage.indexOf(car.name);

        // Remove car name at index.
        storage.remove(index);
        // index+1 item (model) is now index, call remove on `index` again.
        storage.remove(index);
        // index+1 item (price) is now index, call remove on `index` again.
        storage.remove(index);
    }

    @Override
    public void removeAll() {
        storage.clear();
    }

    @NonNull
    @Override
    public String toString() {
        return storage.toString();
    }
}

Пробный прогон

    Car car1 = new Car("car1-name", "car1-model", "car1-price");
    Car car2 = new Car("car2-name", "car2-model", "car2-price");
    Car car3 = new Car("car3-name", "car3-model", "car3-price");

    CarList carList = new MyCarList();
    carList.addCar(car1);
    carList.addCar(car2);
    carList.addCar(car3);
    System.out.println(carList);
    //OUTPUT: [car1-name, car1-model, car1-price, car2-name, car2-model, car2-price, car3-name, car3-model, car3-price]

    carList.removeCar(car2);
    System.out.println(carList);
    //OUTPUT: [car1-name, car1-model, car1-price, car3-name, car3-model, car3-price]

    carList.removeCar(car1);
    System.out.println(carList);
    //OUTPUT: [car3-name, car3-model, car3-price]

    carList.removeCar(car3);
    System.out.println(carList);
    //OUTPUT: []

    carList.addCar(car2);
    System.out.println(carList);
    //OUTPUT: [car2-name, car2-model, car2-price]

Обратите внимание , что в коде пропущены нулевые проверкии крайние случаи (когда вызывается remove, что если пропущенная машина равна нулю? Что, если список пуст, а вызывается remove? Что, если в списке нет машины и вызывается remove? и т. д. и т. д.).

0 голосов
/ 13 апреля 2019

Вы можете удалить определенную позицию из всего списка массивов следующим образом: -

ArrayList<String> firstList = new ArrayList<>();
        ArrayList<String> secondList = new ArrayList<>();
        ArrayList<String> ThirdList = new ArrayList<>();

        firstList.add("first");
        firstList.add("two");
        firstList.add("three");
        firstList.add("four");

        secondList.add("first");
        secondList.add("two");
        secondList.add("three");
        secondList.add("four");

        ThirdList.add("first");
        ThirdList.add("two");
        ThirdList.add("three");
        ThirdList.add("four");

        String value = "three";

        int pos = firstList.indexOf(value);

        firstList.remove(pos);
        secondList.remove(pos);
        ThirdList.remove(pos);
...