我是否知道如何将每个循环的以下内容转换为正常的循环?
for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet())
我有一个count
变量作为起点,地图的结尾作为终点。因此,我如何将其转换为正常的for循环?
答案 0 :(得分:8)
Section 14.14.2 of the JLS提供翻译。在这种情况下,它将大致是:
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)) {
// ...
}
答案 1 :(得分:6)
您说任务是跳过第一个count
元素,然后处理其余元素。
这可以通过“for”循环或“for each”循环来完成。在这种情况下,我会将其保留为“for each”循环:
int i = 0;
for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet()) {
if (i++ < count) continue;
...
}
答案 2 :(得分:0)
迭代地图的推荐方法是使用迭代器或for-each循环(使用迭代器)。
将您的每个循环转换为“正常”循环可以在您的情况下工作,因为您使用整数作为地图键:
for (int i = 0; i < mapDefect.size(); i++) {
String value = mapDefect.get(i)
// do something with value
}
但请注意,这只适用于您使用地图键,因为您使用数组/列表索引(这会使地图无用)。 要使用这种循环,必须使用连续的正整数作为从0开始的映射键