java - 如何在迭代数组列表时仅删除一个元素

标签 java

我想删除与 orderID = 542 匹配的单个元素。但问题是这个程序正在从该列表中删除两个元素。在实际程序中,我迭代数组列表,并调用一个函数来检查该元素是否是从列表中删除,该函数应该从列表中删除该元素

package testMap;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class TestHashMap {
    static ArrayList<LimitOrder> a = new ArrayList<>();

    public static void main(String args[]) {
        create();
    }

    public static void create() {
        LimitOrder l1 = new LimitOrder(1, 100, "145");

        LimitOrder l2 = new LimitOrder(1, 100, "542");

        LimitOrder l3 = new LimitOrder(1, 100, "355");

        a.add(0, l1);
        a.add(1, l2);
        a.add(2, l3);

        Iterator<LimitOrder> i = a.iterator();
        while (i.hasNext()) {
            boolean toremove = false;
            LimitOrder l = i.next();
            toremove=remove();
            if (toremove == true)
            {
                System.out.println("Removed "+l.orderID);
                i.remove();
            }
        }

    }

    public static boolean remove() {
        boolean flag = false;
        Iterator<LimitOrder> i = a.iterator();
        while (i.hasNext()) {
            LimitOrder l = i.next();
            if (l.orderID.equals("542")) {
                flag = true;
            }
        }
        return flag;

    }

}

请帮助我

最佳答案

remove方法中不需要有迭代器,您可以从create方法传递当前的LimitOrder

static ArrayList<LimitOrder> a = new ArrayList<>();

public static void main(String args[]) {
    create();
}

public static void create() {
    LimitOrder l1 = new LimitOrder(1, 100, "145");

    LimitOrder l2 = new LimitOrder(1, 100, "542");

    LimitOrder l3 = new LimitOrder(1, 100, "355");

    a.add(0, l1);
    a.add(1, l2);
    a.add(2, l3);

    Iterator<LimitOrder> i = a.iterator();
    while (i.hasNext()) {
        LimitOrder l = i.next();
        if (remove(l))
        {
            System.out.println("Removed "+l.orderID);
            i.remove();
        }
    }

}

public static boolean remove(LimitOrder l) {
    if (l.orderID.equals("542")) {
        flag = true;
    }
}

关于java - 如何在迭代数组列表时仅删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15584071/

相关文章:

java - Streams API::如何从 LIST<Object> 修改自定义对象的变量?

java - 将 JSON 响应解析为列表

java - 为什么这个赋值不需要显式转换?

java - SQLite语法错误但语句完全正确

java - preparedStatement.setString(1 ,"null"),被解释为 null 而不是字符串(在preparedStatement.addBatch()之后)

java - 泛型:如何在 Map 中强制执行键和值之间的限制

java - 如何查找 xml 字符串值并将其设置为等于 java 变量?

java - 使用绑定(bind)泛型进行计算

java - 声明变量的最佳方式

java - 如何使其他 Web 应用程序可以访问数据库中的数据