如何通过同一个对象离开Iterator?

时间:2013-08-14 10:01:13

标签: java iterator next

如果我创建一个新对象,程序运行正常:

Iterator iter = Students.iterator();
    while (iter.hasNext()){
        Student newstudent=(Student) iter.next();
        if (newstudent.getCourse()==2){
            System.out.println(  newstudent.getName());}

但如果不喜欢:

Iterator iter = Students.iterator();
  while (iter.hasNext()){
   if (((Student) iter.next()).getCourse()==2){
     System.out.println(( (Student)iter.next()).getName());}//Here it is printing out the next object afther that I have checked

如何留在同一个物体上?

7 个答案:

答案 0 :(得分:1)

暂时保存当前学生:

Iterator iter = Students.iterator();
while (iter.hasNext()){
  Student currentStudent = (Student) iter.next()
  if (currentStudent.getCourse()==2) {
    System.out.println(currentStudent.getName());
  } //Here it is printing
}

答案 1 :(得分:0)

因为在以后的情况下,您要两次调用iterator.next()next()调用返回迭代器指向的当前元素将光标移动到下一个元素。所以在你的情况下

Iterator iter = Students.iterator();
while (iter.hasNext()){
   if (((Student) iter.next()).getCourse()==2){ //--> Student 1 is returned by next() call and iterator points to Student 2 (next in the list)
     System.out.println(( (Student)iter.next()).getName());} //--> Student 2 is returned by next() call

将第iterator.next()页返回的元素存储在循环开头的好习惯,就像在第一个示例中一样,以避免意外行为

答案 2 :(得分:0)

每当你调用iter.next()时,迭代器的当前索引就会向前发展。因此需要将当前Student对象保存在临时对象中。
最初
- |
[ - ] [ - ] [ - ] [ - ]
iter.next()
--- |
[ - ] [ - ] [ - ] [ - ]

如果你从这里拨打iter.next() twise --------- |
[ - ] [ - ] [ - ] [ - ]


考虑每个[ - ]是学生对象

答案 3 :(得分:0)

您只需要调用一次next()方法

 while (iter.hasNext()){
 Student student =  (Student) iter.next();
  if (student.getCourse()==2){
     System.out.println(( student.getName());
}

答案 4 :(得分:0)

   if (((Student) iter.next()).getCourse()==2){ //first time next happened
         System.out.println(( (Student)iter.next()).getName());}/  after condition next happened again

简而言之,您正在检查N上的条件并在N+1(N.next)上打印该值。

你在第一种方法中做的是正确的。

答案 5 :(得分:0)

您在程序中两次调用iter.next()。因此错误!

答案 6 :(得分:0)

如果你不想推进迭代器,你总是可以考虑使用PeekingIterator,这允许你在下一个元素处peek而不删除它,例如:

final Iterator<Student> iter = Iterators.peekingIterator(Students.iterator());

final Student a = iter.peek();
final Student b = iter.peek();
final Student c = iter.next();

assert a == b == c;

PeekingIterator中包含{{1}},虽然您可以轻松推出自己的广告。