次の for each ループを通常の for ループに変換する方法を教えてください。
for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet())
開始点として変数がcount
あり、終点としてマップの終わりがあります。したがって、どうすればそれを通常の for ループに変換できますか?
JLSのセクション14.14.2に翻訳が記載されています。この場合、大まかに次のようになります。
for (Iterator<SortedMap.Entry<Integer, String>> iterator
= mapDefect.entrySet().iterator();
iterator.hasNext(); )
{
SortedMap.Entry<Integer, String> entry = iterator.next();
// ...
}
または、 GuavaのIterables
クラスを使用して、並べ替えられたセットのセクションを取得します。
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)) {
// ...
}
タスクは最初のcount
要素をスキップして残りを処理することだとおっしゃっています。
これは、「for」ループまたは「for each」ループのいずれかで実行できます。この場合、これを「for each」ループとして保持します。
int i = 0;
for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet()) {
if (i++ < count) continue;
...
}
マップを反復するための推奨される方法は、反復子または for-each ループ (反復子を使用) を使用することです。
for each ループを「通常の」ループに変換すると、整数をマップ キーとして使用しているため、この場合は機能します。
for (int i = 0; i < mapDefect.size(); i++) {
String value = mapDefect.get(i)
// do something with value
}
ただし、これは配列/リスト インデックスを使用する場合と同じようにマップ キーを使用している場合にのみ機能することに注意してください (マップが役に立たなくなります)。この種のループを使用するには、0 から始まるマップ キーとして連続する正の整数を使用する必要があります。