我想删除与orderID = 542匹配的单个元素。但事实是这个程序正在从该列表中删除两个元素。在实际程序中迭代通过一个arraylist我调用一个函数来检查该元素是否是从列表中删除,该函数假设从列表中删除元素
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;
}
}
请帮帮我
答案 0 :(得分:2)
remove
方法中无需使用迭代器,您可以从LimitOrder
方法传递当前create
。
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;
}
}
答案 1 :(得分:0)
更新函数remove()以接收并检查当前迭代器值。
答案 2 :(得分:0)
问题是您要从列表中删除不匹配的元素。这种情况正在发生,因为您决定是否应删除元素的测试是错误的。您应该测试此元素是否匹配...如果任何元素匹配则不会。
修复方法是更改测试以仅测试当前元素; e.g。
...
Iterator<LimitOrder> i = a.iterator();
while (i.hasNext()) {
LimitOrder l = i.next();
if (isMatch(l)) {
i.remove();
System.out.println("Removed " + l.orderID);
}
}
...
public static boolean isMatch(LimitOrder l) {
return l.orderID.equals("542");
}