2012-05-10 6 views
0

2次元の文字列マップとなるオブジェクトを作成するための宿題があります。 centralMap = new HashMap<String, Map<String,String>>。教授は、putメソッド(public String put(final String row, final String column, final String value))とgetメソッド(public String get(final String row, final String column))や他のいくつかのメソッドのように、私たちが再定義すべきメソッドを含むインターフェースを私に与えました。そして、再定義できなかったものはイテレータメソッドです。彼が与えたインタフェースでは、Entryクラスがありました。イテレータメソッドのためだけに使用します。Map.Interry 2次元マップの反復子について

final class Entry 
{ 
    /** First Key. */ 
    private final String key1; 

    /** Second Key. */ 
    private final String key2; 

    /** Value. */ 
    private final String value; 

    /** Cponstructor for a new Tripel. 
    * @param key1 First Key. 
    * @param key2 Second Key. 
    * @param value Value. 
    */ 
    public Entry(final String key1, final String key2, final String value) 
    { 
     this.key1 = key1; 
     this.key2 = key2; 
     this.value = value; 
    } 

    public String getFirstKey() 
    { 
     return key1; 
    } 

    public String getSecondKey() 
    { 
     return key2; 
    } 

    public String getValue() 
    { 
     return value; 
    } 

    @Override public boolean equals(final Object anything) 
    { 
     if(anything == null) 
      return false; 
     if(getClass() != anything.getClass()) 
      return false; 
     final Entry that = (Entry)anything; 
     return Objects.equals(getFirstKey(), that.getFirstKey()) 
       && Objects.equals(getSecondKey(), that.getSecondKey()) 
       && Objects.equals(getValue(), that.getValue()); 
    } 

    // CHECKSTYLE- Magic Number 
    @Override public int hashCode() 
    { 
     int hash = 7; 
     hash = 17 * hash + Objects.hashCode(getFirstKey()); 
     hash = 17 * hash + Objects.hashCode(getSecondKey()); 
     hash = 17 * hash + Objects.hashCode(getValue()); 
     return hash; 
    } 
    // CHECKSTYLE+ Magic Number 

    @Override public String toString() 
    { 
     return String.format("(%s, %s, %s)", getFirstKey(), getSecondKey(), getValue()); 
    } 

} 

と我々は再定義すべきiteratorメソッドは、このいずれかになります。しかし、私は(実装)ここでは、クラスのエントリ、と私たちは再定義すべきiteratorメソッド..です我々はそれで何をすべきか見当がつかない。 @Override Iterator<Entry> iterator();どうすればいいですか?私はイテレータのためだけに新しいクラスを実装すべきであると聞きました。 私が実装したクラスが必要かどうか教えてください。(そして彼が与えたインタフェースを実装しています)ネストされたマップはputメソッドで作成されているだけです。私のコンストラクタでは、centralMapだけがあります。

ありがとうございました!

+1

:だから、あなただけのような何かをする必要がありhttp://stackoverflow.com/questions/10484575/iterator-in-a-2dimensional-map私はほとんどです重複して投票に近づく傾向がある。 – aioobe

+0

は始める方法を知らなかった:彼が私たちに与えたインタフェースに含まれるこのEntryクラスの使い方を知らなかった。:S申し訳ありません!しかし、ありがとう、あなたの助けをたくさんありがとう!次のような問題が既にありました。eclipseでは、戻り値の型をEntryにキャストする必要があります。返す変数toReturnによるエラーは、EntryまたはStringにキャストする必要があります。 Stringにキャストすると、上記と同じ問題がEntryにキャストされます。 "innerIter.next();" erro:toReturnはStringでなければなりません。 – ZelelB

+0

大丈夫ですが、next()メソッドの解決方法は何ですか?日食は、戻り値の型で問題があると言っている、それは "文字列"にすることはできません – ZelelB

答えて

0

エントリのIteratorを作成するメソッドを作成するだけで済みます。 Entryは、使用されているマップのためにユニークです。私はあなたにこの答えでヒントをたくさん与えた

for entryMap in map do { 
    entryMap get list of keysAndValues 
    for keyValue in keysAndValues preppend this key 
} 
+0

それはコードがあなたによって書き込まれるように擬似コードです。 :P –