Iterator可以从列表中删除不等于特定值的项吗?

时间:2014-01-30 15:50:18

标签: java list iterator

似乎当我尝试遍历列表时,我无法删除所有不等于我希望保留的项目。

例如,我有以下代码:

for (Iterator<Alphabet> iter = list.iterator(); iter.hasNext();) {
    Alphabet item = iter.next();
    if (!item.letter().equals("C")) {
        iter.remove();
    }
}

我希望该列表是一个字母“C”的字母元素的列表,但事实并非如此。我实际上得到一个空列表。如何更改此项以获得预期结果?

1 个答案:

答案 0 :(得分:1)

修改

要回答标题中的问题:是,Iterator可以删除不等于特定值的项

remove()操作只是删除当前对象。如果没有删除正确的对象,则何时删除的逻辑是问题,而不是Iterator或其操作。

原始答案

如果item.letter()返回Character类型,则item.letter().equals("C")将始终返回false。

如果你查看Character.equals()的javadoc,它会说:

  

当且仅当参数不是时,结果才为真   null并且是Character对象   表示与此对象相同的char值。

因此,尝试将其与String"C")进行比较将始终失败并删除该对象。