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

1

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

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

и аналогично по следующим трем показателям у меня есть детали другой машины. Теперь я хочу снять детали одной машины. Как я должен это сделать. Например, я перечислил 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;
    }
}
Теги:
android-studio
arraylist
removeall

3 ответа

0

Вы можете использовать счетчик для удаления

Iterator<String> iterator = a.iterator();

int counter=1;
while(iterator.hasNext())
{
    switch (counter)
    {
        case 1:
            String value = iterator.next();
            if ("abc".equals(value))
            {
                iterator.remove();
                counter=2;
                break;
            }
            break;

        case 2:
            iterator.remove();
            counter=3;
            break;
        case 3:
            iterator.remove();
            counter=1;
            break;


    }
}
0

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

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

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

РЕДАКТИРОВАТЬ
Если вы должны удалить все элементы, вам нужно удалить break; также.

  • 0
    Может ли пройти через итератор и перейти к следующему имени машины, если (если условие истинно)?
  • 0
    Да. Я забыл добавить одну важную вещь, но уже отредактировал ее. Пожалуйста, проверьте мою последнюю правку;)
0

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

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);
  • 0
    Это удалит только одно указанное значение, но я хочу удалить три последовательных значения.
  • 0
    это удалит одно и то же положение из всех списков

Ещё вопросы

Сообщество Overcoder
Наверх
Меню