如何从List<SelectItem>
删除“abcd”的值。
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());
}
}
答案 0 :(得分:3)
试试这个:
list.remove(1);
其中1
是索引。这将删除此列表中指定位置的元素。
如果您想要根据state
这样删除元素:
list.remove(new SelectItem("abcd"));
您必须覆盖SelectItem
类的.equals()和.hashCode()方法,因为:
remove(Object o)在内部使用.equals()
来比较列表中是否存在该元素,如果存在,则会删除第一次出现的new SelectItem("abcd")
答案 1 :(得分: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
答案 2 :(得分:1)
似乎是SelectItem
doesn't implement equals()
。我能看到的唯一选择是迭代每个元素并确定索引,然后使用ArrayList#remove(int index)。
答案 3 :(得分:1)
您需要使用Iterator
并遍历您的列表。每当你找到匹配项(我认为你可以使用SelectItem的getValue()
方法)时,使用迭代器将其删除。
由于您无法更改equals()
的{{1}}方法,请使用此类迭代器
SelectItem
答案 4 :(得分:1)
似乎SelectItem没有实现等于&amp; hashCode方法正确。在这种情况下,您可以遍历列表并删除相应的项目,或者保留对实际选择项目的引用并直接删除该引用。
答案 5 :(得分:0)
为了让您编写的代码,您需要实施equals()
的{{1}} 方法。
来自SelectItem
方法的java文档:
remove
在提供的条件中注意 o.equals(get(i))部分。
换句话说 - removes the element with the lowest index i such
that (o==null ? get(i)==null : o.equals(get(i)))
的实现搜索要删除的特定对象。如何判断某个项目是否是请求的对象?当然,它使用ArrayList
方法,如果项目等于您提供的项目,则只有它被移除。
请注意:为了与其他收集操作保持一致,您还需要实施equals()
方法,使其与hashCode()
一致方法强>
答案 6 :(得分:0)
在JSF的上下文中,SelectItem是UISelectOne中的有效选项,当您使用仅带参数的构造函数时,参数设置为Value。
试试这段代码:
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");
这不会在迭代时修改列表,它会返回所需的元素,然后您可以将其删除或根据需要使用
干杯
答案 7 :(得分:0)
试试这段代码,
public SelectItem getItemToRemove(List<SelectItem> items, SelectItem item) {
for (SelectItem si : items) {
if (si.getValue().equals(item.getValue())) {
return si;
}
}
return null;
}
答案 8 :(得分: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
}
}