如何在数组列表上使用迭代器,基于一个条件从数组列表中删除特定的值及其下两个值?

时间:2019-04-13 07:33:48

标签: java android arraylist removeall

我在前三个索引中有一个字符串类型的数组列表,我有一辆类似的车的细节

  • 汽车名称
  • 模型
  • 价格

类似地,在接下来的三个索引中,我还提供了另一辆车的详细信息。 现在,我要删除一辆车的详细信息。我应该怎么做。 例如,我有一个名为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 :(得分:0)

您可以像这样从所有arrayList中删除特定位置:-

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

答案 1 :(得分:0)

它仅删除第一个值,因为它是唯一满足if语句要求的值。如果要删除它们,则只需要改进if语句或删除它即可。

实际上,您正在做的是"abc".equals(value),并且此验证仅在第一个元素中为true。

注意:由于您正在使用Kotlin,因此此处的一个好习惯是将您的列表转换为MutableList()并使用removeAll() function from Kotlin

编辑
如果应该删除所有元素,则还需要删除break;

答案 2 :(得分:0)

让我们定义一个简单的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,该怎么办?如果car呢?列表中不存在,并称为remove?等)。