2012-05-07 61 views
1

我想知道如何在2D維度HashMap中迭代?我創建一個Object TrueStringMap2D,它執行以下操作:它將是一個地圖2D,我的意思是2個鍵和一個值。迭代器在2D維度映射

但是這裏實現的迭代器沒有功能..我不知道如何重新定義TrueStringMap2D中的迭代器方法:S(如果可能應該在迭代器()函數中刪除) 任何人都可以提供幫助嗎? 非常感謝!

+0

任何人都可以幫助嗎? – ZelelB

+1

[我不認爲它想要閱讀所有這些。](http://meta.stackexchange.com/a/129787/175248)如果你能減少你的代碼以適應你的問題的範圍,那麼會是一個巨大的好處。 – Makoto

+0

我想重新定義迭代器方法,它將遍歷包含已映射映射的映射。 (隨着我發佈的課程條目) – ZelelB

回答

3

我會將問題重新解釋爲我喜歡回答的類似問題,然後希望這個問題的答案對您有用。

這是我會回答這個問題:

如何編寫一個迭代器,超過在Map<String, Map<String, String>>所有值迭代?

這是我會怎麼解決這個問題:

class TwoDimIterator implements Iterator<String> { 

    Iterator<Map<String, String>> outerIter; 
    Iterator<String> innerIter = Collections.<String>emptyList().iterator(); 

    public TwoDimIterator(Map<String, Map<String, String>> twoDimMap) { 
     outerIter = twoDimMap.values().iterator(); 
     advanceInner(); 
    } 

    @Override 
    public boolean hasNext() { 
     return innerIter.hasNext(); 
    } 

    @Override 
    public String next() { 
     String toReturn = innerIter.next(); 
     advanceInner(); 
     return toReturn; 
    } 

    private void advanceInner() { 
     while (!innerIter.hasNext()) { 
      if (!outerIter.hasNext()) { 
       innerIter = Collections.<String>emptyList().iterator(); 
       return; 
      } 
      innerIter = outerIter.next().values().iterator(); 
     } 
    } 

    @Override 
    public void remove() { 
     throw new UnsupportedOperationException(); 
    } 
} 

測試代碼:

class Test { 

    public static void main(String[] args) { 

     // Create a map 
     Map<String, Map<String, String>> twoDimMap = 
       new HashMap<String, Map<String, String>>(); 

     // Fill it 
     Map<String, String> innerA = new HashMap<String, String>(); 
     innerA.put("1", "A1"); 
     innerA.put("2", "A2"); 

     Map<String, String> innerB = new HashMap<String, String>(); 
     innerB.put("1", "B1"); 
     innerB.put("2", "B2"); 

     twoDimMap.put("A", innerA); 
     twoDimMap.put("B", innerB); 

     // Create an iterator for the values: 
     Iterator<String> twoDimIter = new TwoDimIterator(twoDimMap); 
     while (twoDimIter.hasNext()) 
      System.out.println(twoDimIter.next()); 

    } 
} 

輸出:

A2 
A1 
B2 
B1 
+0

非常感謝您的回答!但它是一項家庭作業,而教授告訴我們我們不應該使用外部類。我們應該重新定義迭代器方法。你能適應它到我的TrueStringMap2D嗎?它只是一個方法..這就是爲什麼我發佈了接口(包含類Entry,我們將只用於迭代器方法)和我的TrueStringMap2D ..你能理解代碼嗎?它是我應該實現的最後一個方法..謝謝! – ZelelB

+0

如果是作業,我想我會留下餘下的步驟供您解決。 :) – aioobe

+0

但它不會返回每個條目的3個值(key1,key2,value)......它僅返回值..:S – ZelelB