如何获得使用迭代器时的当前循环索引?

我正在使用一个迭代器遍历一个集合,我想获取当前元素的索引。

我怎样才能做到这一点?

使用你自己的variables,并在循环中增加它。

我有同样的问题,发现使用ListIterator工作。 类似于上面的testing:

 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。

这里有一种方法可以使用自己的variables并保持简洁:

 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 

好处是你不会在循环中增加你的索引(尽pipe你需要小心,每次循环只需要调用一次Iterator# – 只需要在最上面)。

您可以使用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); } 

什么样的收集? 如果它是List接口的实现,那么你可以使用it.nextIndex() - 1

使用ListIterator遍历集合。 如果Collection不是一个List,那么首先使用Arrays.asList(Collection.toArray())将它变成一个List。

使用一个int并在你的循环中增加它。

看到这里 。

iterator.nextIndex()将提供通过后续调用next()返回的元素的索引。

所有你需要使用它的iterator.nextIndex()来返回迭代器所在的当前索引。 这可能比使用自己的计数器variables(它仍然可以)更容易一些。

 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); } } 

这段代码将一次一个列表地浏览list1列表,然后打印该项目的文本,然后“处于索引”,然后打印出迭代器find的索引。 🙂

只是做这样的事情:

 for (AbstractDevice device : mDevicesList){ int curIndex = mDevicesList.indexOf(device)); }