0

次のように、メソッドでが作成されたnestedMapときに、イテレーターで myにアクセスできますか?nestedMapput()

@Override
public String put(final String row, final String column, final String value) {
    /**
     * Second map which is contained by centralMap, that contain Strings as
     * Keys and Values.
     */
    Map<String, String> nestedMap;

    if (centralMap.containsKey(row))
        nestedMap = centralMap.get(row);
    else
        nestedMap = new HashMap<String, String>();
    if (!nestedMap.containsKey(column))
        counter++;
    centralMap.put(row, nestedMap);
    return nestedMap.put(column, value);
}

centralMap は Object-Variable として宣言されています。

private final Map<String, Map<String, String>> centralMap;

ただし、次のようにコンストラクターでインスタンス化されます。

centralMap = new HashMap<String, Map<String, String>>();

私が実装しようとしているメソッドは remove メソッドです:

@Override
    public void remove() {
        for (Map<String, String> map : centralMap.values()) {
            map = centralMap.get(keyName);
            iteratorNested.remove();
            if (map.size() <= 0)
                iteratorCentral.remove();
        }
    }

どうもありがとう!

4

1 に答える 1

0

あなたが何を求めているのか正確にはわかりませんが、これは少し読みやすいと思います:

@Override
public String put(final String row, final String column, final String value) {
    /**
     * Second map which is contained by centralMap, that contain Strings as
     * Keys and Values.
     */
    Map<String, String> nestedMap = centralMap.get(row);
    if (nestedMap == null) {
      nestedMap = new HashMap<String, String>();
      centralMap.put(row,nestedMap);
    }

    if (!nestedMap.containsKey(column))
        counter++;
    centralMap.put(row, nestedMap);
    return nestedMap.put(column, value);
}

2 番目のスタンザで何をしているのかよく理解できないので、それを改善する手助けはできません。そして、あなたの質問で言及されているイテレータが表示されません。

あなたは私に推測させていますが、おそらくプログラムのELSEWHERE (より多くのコード、および特定の関数プロトタイプまたは探している動作のステートメントを確認するのに本当に役立ちます)centralMapインスタンスのコンテンツを反復処理できるようにしたい、および のネストされたインスタンスnestedMap。はい、できます。

public void iterateOverAllNested()
{
   for (Map.Entry<String,Map<String,String>> nested : centralMap) {
     final String centralKey = nested.key();
     final Map<String,String> nestedMap = nested.value();
     System.out.println("Central map row/column: "+centralKey);
     for (Map.Entry<String,String> entry : nestedMap) {
       System.out.println(" key="+entry.key()+", value="+entry.value());
     }
   }
}

匂いますのでご注意ください。型指定されていない のネストされたマップは、Stringおそらく間違っています。最近 Perl を書いている可能性はありますか? 特定の問題に対する適切なデータ構造について尋ねる 2 番目の SO 質問を作成することをお勧めします。このコードを開始点として含めることができ、人々はよりクリーンなソリューションを提供する可能性があります。

于 2012-05-10T20:49:24.053 に答える