簡體   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