通用for循环:有没有办法获取迭代信息?

时间:2013-03-18 16:15:36

标签: java loops

我习惯用这样的泛型来实现循环:

for (final Dog lDog : lAllDog) {
   ...
}

另一个商业案例的不幸我需要迭代的当前计数。 我知道我可以通过编写类似的东西来解决这个问题:

for (int i = 0 ; i < lAllDog.length(); i++) {
   System.out.println(i);
}

int i = 0;
for (final Dog lDog : lAllDog) {
   ...
   i++;
}

但有没有办法用我的第一个代码示例获取当前的迭代计数而不声明新的int或更改整个循环标题?

很多

5 个答案:

答案 0 :(得分:5)

简单地说,没有。你必须使用索引方法来做到这一点。

答案 1 :(得分:1)

不,除了您在问题中描述的迭代之外,没有其他方法可以获得迭代次数。您将不得不使用旧方法来进行计数器定义

答案 2 :(得分:1)

没有。增强的for循环不包含索引。如果你想要的话,你必须自己介绍一下。

原因是因为它基于Iterable接口。从本质上讲,它使用迭代器来循环遍历集合。

答案 3 :(得分:1)

不,如果您的列表包含唯一元素

可能你可以试试这个

for (final Dog lDog : lAllDog) {

 int i=  lAllDog.indexOf(lDog);
}

答案 4 :(得分:1)

他们说计算机科学中的每个问题都可以通过更多间接来解决

class Indexed<T>
    int index;
    T value;

static <T> Iterable<Indexed<T>> indexed(Iterable<T> iterable){ ... }

for(Indexed<Dog> idog : indexed(dogs))
    print(idog.index);
    print(idog.value);

在java 8中,我们可能希望将此控件模式抽象为

forEach(dogs, (index, dog)->{ 
    print(index);
    print(dog);
});

static <T> void forEach(Iterable<T> collections, Acceptor<T> acceptor){...}

interface Acceptor<T>
    void accept(int index, T value);