0

orderID = 542に一致する単一の要素を削除したかったのですが、このプログラムはそのリストから2つの要素を削除しています。実際のプログラムでは、配列リストを反復処理し、関数を呼び出して、その要素が削除されるかどうかを確認します。リストとその関数は、リストから要素を削除することを想定しています

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;

    }

}

私を助けてください

4

3 に答える 3

2

メソッドにイテレータを含める必要はありません。メソッドからremove電流を渡すことができます。LimitOrdercreate

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;
    }
}
于 2013-03-23T06:37:15.927 に答える
0

関数remove()を更新して、現在のイテレータ値を受信して​​確認します。

于 2013-03-23T06:42:30.570 に答える
0

問題は、一致しない要素をリストから削除していることです。そして、それは、要素を削除する必要があるかどうかを判断するためのテストが間違っているために発生しています。この要素が一致するかどうかをテストする必要があります...どの要素も一致するかどうかではありません。

修正は、現在の要素のみをテストするようにテストを変更することです。例えば

    ...
    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");
}
于 2013-03-23T07:35:28.787 に答える