我习惯用这样的泛型实现循环:
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);