2013-11-24 72 views
0

我想要迭代的列表包含一個Array。Java - 試圖在迭代器中創建迭代器

我想要做的是使在Iterator中創建一個Iterator成爲可能,這樣我就能遍歷每個Listelement中的數組。

我試着這樣說:

@Override 
public Iterator<A> iterator() { 
    return new MyListIterator(); 
} 

private class MyListIterator implements Iterator<A>, Iterable<B> 
{ 
    private Listelem current; 

    private MyListIterator() 
    { 
     this.current = head; 
    } 

    @Override 
    public boolean hasNext() 
    { 
     return this.current != null; 
    } 

    @Override 
    public A next() 
    { 
     A next  = this.current.getValue(); 
     this.current = this.current.getSuccessor(); 
     return next; 
    } 

    @Override 
    public void remove() 
    { 
     Listelem tmp = head; 
     while(tmp.getSuccessor().getSuccessor() != this.current) 
     { 
      tmp = tmp.getSuccessor(); 
     } 
     tmp.setSuccessor(this.current); 
    } 

    @Override 
    public Iterator<B> iterator() { 
     return new MyInnerListIterator(); 
    } 

    private class MyInnerListIterator implements Iterator<B> 
    { 
     private int currentIndex = 0; 
     private B[] array = current.getAssoc(); 
     @Override 
     public boolean hasNext() { 
      return currentIndex < array.length && array[currentIndex] != null; 
     } 

     @Override 
     public B next() { 
      return array[currentIndex++]; 
     } 

     @Override 
     public void remove() { 

     } 

    } 
} 

的問題是,當我創造與迭代器)的第一個迭代器()的對象不包含方法迭代器(。

有人可以解釋爲什麼這是行不通的,如何做到這一點不同?

+1

無需使用迭代器即可輕鬆迭代數組。 – KKKCoder

回答

1

問題是迭代器返回一個迭代器,即使在這種情況下它也碰巧也是一個MyListIterator。 Class Iterator沒有iterator()函數。你需要讓iterator()返回一個MyListIterator,以便你可以使用不在Iterator接口中的方法。 很可能簡單不過,簡單地用一個用於:在循環:

List<Object[]> list = .... 
for (Iterator<Object[]> it = list.iterator(); it.hasNext();) { 
    Object[] arr = it.next(); 
    for (Object o : arr) { 
     ... 
    } 
} 

如果你不需要從列表中刪除元素,那麼你可以用另一個方法爲更換迭代器用途:

+0

謝謝,我已經認爲這可能是問題所在 –