如何从迭代器next()方法返回的对象中获取信息?

时间:2014-04-11 11:17:11

标签: java iterator

我想将人物对象的目标变量(类型int)与提升物体的当前楼层变量(类型int)进行比较。 person对象位于属于Lift类的ListArray中。我正在使用迭代器接口迭代ListArray,以将每个人的目的地与电梯的当前楼层进行比较。方法match(int destination)用于返回true或false。

这是我的代码不起作用:

Iterator iterator = lift.getOccupants().iterator();
while(iterator.hasNext()){
  if(lift.match(iterator.next().getDestination())){
  }

getDestination()方法带有下划线,错误:

  

找不到符号,方法getDestination(),位置类Object

5 个答案:

答案 0 :(得分:1)

next()方法返回类型是Object,因此您需要键入将其强制转换为Person对象 像

((Person)iterator.next()).getDestination()  

否则你可以使用像List这样的Generic List对象,并通过它获得Generic迭代器。

Iterator<Person> iterator = lift.getOccupants().iterator();

然后你不需要任何演员。

答案 1 :(得分:1)

使用

Iterator<Occupant> iterator = lift.getOccupants().iterator();

涉及Iterator的正确习语不是while,而是for - 循环:

for (Iterator<Occupant> it = lift.getOccupants().iterator; it.hasNext();)
  if (lift.match(it.next().getDestination())) it.remove();

这样做的好处是保持it的范围。

答案 2 :(得分:0)

参数化迭代器,这对你有用

    Iterator<Person> iterator = lift.getOccupants().iterator(); 
    while(iterator.hasNext()){ 
       if(lift.match(iterator.next().getDestination())){ 
       }
    }

答案 3 :(得分:0)

使用Java 8 Stream

lift.getOccupants().stream()
                   .filter(o -> lift.match(o.getDestination()))
                   // ...

答案 4 :(得分:0)

在java中使用泛型,如下所示:

  Iterator<Person> iterator = lift.getOccupants().iterator();
  while(iterator.hasNext()){  
  if(lift.match(iterator.next().getDestination())){   }