2次元のハッシュマップでどのように反復処理を行うことができますか?私は次のことを行うオブジェクトTrueStringMap2Dを作成しています。マップ2D、つまり2つのキーと1つの値を意味します。2次元のマップ内のイテレータ
ここで実装されているイテレーターは機能しません。TrueStringMap2DでIteratorメソッドを再定義する方法を知りませんでした:S(イテレーター()機能で削除する必要がある場合) 誰でも手助けできますか? ありがとうございます!
2次元のハッシュマップでどのように反復処理を行うことができますか?私は次のことを行うオブジェクトTrueStringMap2Dを作成しています。マップ2D、つまり2つのキーと1つの値を意味します。2次元のマップ内のイテレータ
ここで実装されているイテレーターは機能しません。TrueStringMap2DでIteratorメソッドを再定義する方法を知りませんでした:S(イテレーター()機能で削除する必要がある場合) 誰でも手助けできますか? ありがとうございます!
私は質問を答えが似ているものに再解釈し、うまくいけばその質問に対する答えはあなたにとって有益です。
ここで私がお答えします質問です:
を私は
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
お返事ありがとうございます!しかし、その宿題と教授は、私たちに外部クラスを使うべきではないことを教えてくれました。イテレータメソッドを再定義するだけです。あなたはそれを私のTrueStringMap2Dに適応できますか?それはちょうどメソッド..それは私がイテレータメソッドのためだけに使用するクラスEntryを含む)と私のTrueStringMap2D ..インターフェイスを投稿した理由です。私はコードを理解できますか?その最後の方法は、実装する必要があります..ありがとう!! – ZelelB
宿題の場合は、残りのステップを解決して解決すると思います。 :) – aioobe
しかし、それは各エントリの3つの値(key1、key2、value)を返しません...それは値を返します..:S – ZelelB
は誰でもしてください助けることができますか? – ZelelB
[私はSOがそれをすべて読んでいるとは思っていません](http://meta.stackexchange.com/a/129787/175248)あなたの質問の範囲に合うようにあなたのコードを書き換えることができれば、大きな利点となるでしょう。 – Makoto
無駄なマップが含まれているマップを反復処理するイテレータを再定義したいと思います。 (私が投稿したクラスEntryで) – ZelelB