泛型for循环:是否有方法获取迭代信息



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

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或改变整个循环头?

Thx a lot

简单地说,没有。需要使用索引方法

不,除了您在问题中描述的之外,没有其他方法可以获得迭代计数。你需要用老方法来定义计数器

No。增强的for循环不包含索引。如果你想要的话,你得自己介绍。

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

不,如果你的列表有唯一的元素

也许你可以试试这个

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

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

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

相关内容

  • 没有找到相关文章

最新更新