11

次の for each ループを通常の for ループに変換する方法を教えてください。

for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet())

開始点として変数がcountあり、終点としてマップの終わりがあります。したがって、どうすればそれを通常の for ループに変換できますか?

4

3 に答える 3

8

JLSのセクション14.14.2に翻訳が記載されています。この場合、大まかに次のようになります。

for (Iterator<SortedMap.Entry<Integer, String>> iterator
         = mapDefect.entrySet().iterator();
     iterator.hasNext(); )
{
    SortedMap.Entry<Integer, String> entry = iterator.next();
    // ...
}

または、 GuavaIterablesクラスを使用して、並べ替えられたセットのセクションを取得します。

Iterable<SortedMap.Entry<Integer, String>> section = Iterables.limit(
    Iterables.skip(mapDefect.entrySet(), start), end - start);
for (SortedMap.Entry<Integer, String> entry : section) {
    // ...
}

または、それが(明確なコメント付きで)からのものであるcount場合:

for (SortedMap.Entry<Integer, String> entry :
         Iterables.skip(mapDefect.entrySet(), count)) {
    // ...
}
于 2012-12-19T10:38:01.150 に答える
6

タスクは最初のcount要素をスキップして残りを処理することだとおっしゃっています。

これは、「for」ループまたは「for each」ループのいずれかで実行できます。この場合、これを「for each」ループとして保持します。

int i = 0;
for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet()) {
   if (i++ < count) continue;
   ...
}
于 2012-12-19T10:38:33.117 に答える
0

マップを反復するための推奨される方法は、反復子または for-each ループ (反復子を使用) を使用することです。

for each ループを「通常の」ループに変換すると、整数をマップ キーとして使用しているため、この場合機能します。

for (int i = 0; i < mapDefect.size(); i++) {
  String value = mapDefect.get(i)
  // do something with value
}

ただし、これは配列/リスト インデックスを使用する場合と同じようにマップ キーを使用している場合にのみ機能することに注意してください (マップが役に立たなくなります)。この種のループを使用するには、0 から始まるマップ キーとして連続する正の整数を使用する必要があります。

于 2012-12-19T10:49:47.783 に答える