1

から「abcd」の値を削除する方法List<SelectItem>

public class Sample {
public static void main(String[] args) {
    List<SelectItem> list= new ArrayList<SelectItem>();

    list.add(new SelectItem("abc"));
    list.add(new SelectItem("abcd"));
    list.add(new SelectItem("abcdf"));

    System.out.println("size  :"+list.size());
    System.out.println("List  :"+list);
    list.remove(new SelectItem("abcd"));
    System.out.println("List :"+list.size());


}
}
4

9 に答える 9

3

代わりにこれを試してください:

list.remove(1);

1インデックスはどこにありますか。これにより、このリスト内の指定された位置にある要素が削除されます。

このような要素に基づいて要素を削除する場合state:

list.remove(new SelectItem("abcd"));

クラス の.equals( ) メソッドと.hashCode()メソッドをオーバーライドする必要があります。なぜなら、 remove(Object o)は内部的に を使用して、要素がリストに存在するかどうかを比較し、存在する場合は、最初に出現したものを削除しますSelectItem.equals()new SelectItem("abcd")

于 2013-10-09T10:42:03.633 に答える
1

SelectItem が equals & hashCode メソッドを適切に実装していないようです。このようなシナリオでは、リストを反復処理して適切なアイテムを削除するか、実際の選択アイテムへの参照を保持してその参照を直接削除することができます。

于 2013-10-09T10:48:19.557 に答える
1

SelectItem実装していないequals()ようです。私が見ることができる唯一のオプションは、各要素を反復処理してインデックスを決定し、次にArrayList#remove(int index) を使用することです。

于 2013-10-09T10:47:34.763 に答える
1

Iteratorを使用して、リストをトラバースする必要があります。一致するものを見つけるたびに (SelectItem のメソッドを使用できると思いますgetValue())、イテレータを使用してそれを削除します。

equals()のメソッドを変更することはできないので、SelectItemこのようにイテレータを使用します

Iterator<SelectItem> itr = list.iterator();
while (itr.hasNext()) {
    SelectItem si = itr.next();
    if (si.getValue().equals("abcd")) {
        itr.remove();
            // You removed what you wanted, you can break here, if you want
    }
}
于 2013-10-09T10:47:57.353 に答える
1

これを使って:

    SelectItem selectItem = new SelectItem();
    selectItem.setValue("abcd");
    list.remove(selectItem); // Just call the remove method
    // If present, it'll remove it, else, won't do anything
于 2013-10-09T10:43:11.657 に答える
0

このコードを試して、

public SelectItem getItemToRemove(List<SelectItem> items, SelectItem item) {
    for (SelectItem si : items) {
        if (si.getValue().equals(item.getValue())) {
            return si;
        }
    }
    return null;
}
于 2013-10-09T10:54:09.953 に答える
0

JSF のコンテキストでは、SelectItem は UISelectOne の有効なオプションです。引数のみを取るコンストラクターを使用すると、パラメーターはその値として設定されます。

このコードを試してください:

public SelectItem getItem(List<SelectItem> items, Object value) {

    for (SelectItem si : items) {
        if (si.getValue().equals(si)) {
            return si;
        }
    }
    return null;

}

そして、次のように使用します:

    list.remove(getItemToRemove(list, "abcd");

これは、反復時にリストを変更せず、目的の要素を返します。その後、それを削除するか、必要に応じて使用できます

乾杯

于 2013-10-09T10:47:16.557 に答える
0

作成したコードが機能するためには、 のメソッドを実装する必要がありますequals()SelectItem

メソッドのJavaドキュメントからremove

removes the element with the lowest index i such
that (o==null ? get(i)==null : o.equals(get(i))) 

提供された条件のo.equals(get(i))の部分に注意してください。

つまり、ArrayList削除する特定のオブジェクトの検索の実装です。特定のアイテムが要求されたオブジェクトであるかどうかをどのように判断できますか? 当然、それはequals()メソッドを使用し、アイテムが提供された削除するアイテムと等しい場合にのみ削除されます。

注意: 他のコレクション操作との一貫性を保つために、メソッドと一貫性があるようにメソッドを実装する必要もあります。hashCode()equals()

于 2013-10-09T10:43:08.260 に答える
0

このロジックを試してみてください。

    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).getValue().toString().equals("abcd")) {
           list.remove(i);
           System.out.println(i); //checking the element number which got removed
        }
    }
于 2020-11-13T06:36:40.917 に答える