似乎当我尝试遍历列表时,我无法删除所有不等于我希望保留的项目。
例如,我有以下代码:
for (Iterator<Alphabet> iter = list.iterator(); iter.hasNext();) {
Alphabet item = iter.next();
if (!item.letter().equals("C")) {
iter.remove();
}
}
我希望该列表是一个字母“C”的字母元素的列表,但事实并非如此。我实际上得到一个空列表。如何更改此项以获得预期结果?
答案 0 :(得分:1)
要回答标题中的问题:是,Iterator可以删除不等于特定值的项。
remove()
操作只是删除当前对象。如果没有删除正确的对象,则何时删除的逻辑是问题,而不是Iterator
或其操作。
如果item.letter()
返回Character
类型,则item.letter().equals("C")
将始终返回false。
如果你查看Character.equals()
的javadoc,它会说:
当且仅当参数不是时,结果才为真 null并且是
Character
对象 表示与此对象相同的char
值。
因此,尝试将其与String
("C"
)进行比较将始终失败并删除该对象。