11

我可以知道如何将每个循环的以下内容转换为普通的 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 回答