我试图在TreeSet中实现一个搜索方法.通过使用带有condtional的迭代器,我希望能够遍历集合并打印匹配条件的对象.然而,我现在这样做的方式是打印出后续对象而不是当前对象.这是我到目前为止:
public void getDetails() {
Iterator<Person> it = this.getPersonSet().iterator();
System.out.println("Enter First Name");
String first = in.next().toLowerCase();
System.out.println("Enter Second Name");
String last = in.next().toLowerCase();
while (it.hasNext()) {
if (it.next().getLast().toLowerCase().equals(last)) {
Person p = it.next();
System.out.println(p);
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒
rkg*_*rkg 33
这是你想要做的:
while (it.hasNext()) {
Person p = it.next();
if (p.getLast().toLowerCase().equals(last)) {
System.out.println(p);
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 24
如何引用迭代器中的当前对象
为了记录,IteratorAPI不允许您这样做.没有"当前"对象的概念.该Iterator.next()方法为您提供下一个对象...并继续前进.
(ListIterator.previous()和ListIterator.next()方法是类似的.请注意,在这种ListIterator情况下,方法行为是根据游标来记录的,该游标表示迭代序列中元素之前/之间/之后的位置.)
解决方案是将调用结果分配给it.next()临时变量,如接受的答案所述.
我不确定为什么设计师没有在API中包含"当前"对象的概念,但我可以想到几个原因:
ListIterator接口中记录的"游标"模型......并且当前Iterator设计暗示了这一点.听起来很不错......