回答
使用自己的变量,在环加一。
但是请参阅@ mateusz-dymczyk有关'it.nextIndex()'的建议。收集是List时有用。 – noamtm 2016-09-06 08:57:49
使用int和你的循环中增加它。
什么样的收集?如果它是List接口的实现,那么你可以使用it.nextIndex() - 1
。
使用ListIterator通过收集迭代。如果集合不是以使用Arrays.asList(Collection.toArray())
首先将其变成列表开始的列表开始。
见here。
iterator.nextIndex()
将提供将由后续调用返回到next()
元素的索引。
接口迭代器没有nextIndex()方法。你需要为此明确使用一个ListIterator,但是OP对Iterator有特别的质疑。 – 2018-02-21 11:10:26
这里是一种使用自己的变量,并保持其简洁的做到这一点:
List<String> list = Arrays.asList("zero", "one", "two");
int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
String s = it.next();
System.out.println(i + ": " + s);
}
输出(你猜对了):
0: zero
1: one
2: two
的好处是,你不增加你的循环中的索引(尽管你需要小心,每次循环只接下来调用Iterator# - 只需在顶部执行)。
如果你自己创建迭代器,你也可以使用ListIterator,并且不需要单独的int变量。 – 2012-08-20 07:14:14
如果你为Arrays.asList使用'静态导入',那么你可以直接写'asList(“zero”,“one”,“two”)' – karmakaze 2015-06-23 15:48:30
,这正是我在阅读Paul的答案之前所做的。我强烈劝阻你,因为我没有看到任何好处。你认为有一个优点(除了提到的那个)。你为什么不使用for-each循环?如果使用自己的变量,则明确定义迭代器不是必需的。 – 2016-05-20 08:08:35
我有同样的问题,使用的ListIterator工作中。类似于上面的测试:
List<String> list = Arrays.asList("zero", "one", "two");
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
确保您调用nextIndex之前,你实际上得到下一个()。
感谢您提及'确保您调用nextIndex之前,您实际上得到下一个()' – 2016-12-22 11:27:51
您可以使用ListIterator
做计数:
final List<String> list = Arrays.asList("zero", "one", "two", "three");
for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
final String s = it.next();
System.out.println(it.previousIndex() + ": " + s);
}
所有你需要使用它的iterator.nextIndex()迭代器上,返回当前索引。这可能比使用自己的计数器变量更容易一些(它仍然有效)。
public static void main(String[] args) {
String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
List<String> list1 = new ArrayList<String>(Arrays.asList(str1));
ListIterator<String> it = list1.listIterator();
int x = 0;
//The iterator.nextIndex() will return the index for you.
while(it.hasNext()){
int i = it.nextIndex();
System.out.println(it.next() + " is at index" + i);
}
}
此代码将通过列表1列表一个项目的时间和打印项目的文本,然后在“在索引”,那么它将打印索引迭代器发现它的。 :)
只是做这样的事情:
for (AbstractDevice device : mDevicesList){
int curIndex = mDevicesList.indexOf(device));
}
的
调用indexOf()将需要额外扫描设备列表。简单地增加一个本地计数器会更快。 – 2014-03-13 13:24:34
- 1. SSRS - 获取当前tablix迭代索引
- 2. 循环索引在迭代
- 3. 如何在NSEnumerator迭代中获取当前对象的索引?
- 4. 如何获取jQuery中每个()循环的当前迭代?
- 5. 如何在foreach循环中获取当前数组索引?
- 6. Ansible - 迭代主机时获取当前循环计数
- 7. 如何从for循环中的匿名函数获取当前循环迭代?
- 8. 使用$ .each循环遍历结果时,如何引用当前迭代的索引?
- 9. 在XPath嵌套迭代中获取当前索引
- 10. 如何获取FOREACH迭代的索引
- 11. 从(int&i:i)获取当前迭代器
- 12. 在循环访问字符串数组的同时访问循环变量的当前迭代的索引
- 13. 如何在批量迭代数组的同时引用当前索引?
- 14. 迭代器模式 - 循环引用
- 15. 获取Powershell循环中当前项目的索引?
- 16. 如何使用量角器+角获得迭代器索引/键?
- 17. 如何用std :: map获取双向迭代器的索引?
- 18. 如何获得当前索引中的阵列,同时在循环C#
- 19. 在while循环中使用迭代器
- 20. Tsung:在循环中使用迭代器
- 21. Java - 获取循环迭代器到循环内的函数?
- 22. 如何在此循环中找到迭代索引
- 23. 循环播放时获取索引
- 24. 如何在迭代器中引用当前对象
- 25. 在for循环之前定义循环迭代器?
- 26. 模板循环,如果当前迭代是从以前的迭代
- 27. 使用迭代器获取向量的索引
- 28. 如何获取ByteString中迭代器的当前位置?
- 29. 如何使用范围循环迭代
- 30. NoSuchElementException当使用Scanner对象并在循环中迭代时
可能重复[是否有访问Java的for-each循环迭代柜台的方式?(http://stackoverflow.com/questions/477550/is-there-a-way-to-access-an-iteration-counter-in-javas-for-each-loop) – finnw 2010-07-25 16:10:34
@finnw我不认为它们是重复的。这个问题是使用Iterator,另一个是使用for-each循环。这两个问题都是通过类似的方法解决的,所以答案是重复的而不是问题。 – Robert 2014-06-03 11:03:31