繁体   English   中英

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

[英]Generic for-loop: Is there a way to get iteration information?

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

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

多谢

简而言之,没有。 您必须使用索引方法来执行此操作。

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

不。增强的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM