5

私は次のようなジェネリックを使用してループを実装することに慣れています。

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しかし、新しいものを宣言したり、ループ ヘッダー全体を変更したりせずに、最初のコード例で現在の反復回数を取得する方法はありますか?

ありがとう

4

5 に答える 5

5

簡単に言えば、いいえ。そのためには、索引付けメソッドを使用する必要があります。

于 2013-03-18T16:17:14.790 に答える
1

いいえ、質問で説明した以外に反復回数を取得する方法はありません。カウンターを定義するには、古い方法を使用する必要があります

于 2013-03-18T16:20:21.390 に答える
1

いいえ。強化された for ループはインデックスを保持しません。必要な場合は、自分で紹介する必要があります。

その理由は、 Iterableインターフェースに基づいているためです。基本的に、イテレータを使用してコレクションをループします。

于 2013-03-18T16:20:31.693 に答える
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);
于 2013-03-18T16:23:06.277 に答える
1

いいえ、リストに固有の要素がある場合

これを試すことができるかもしれません

for (final Dog lDog : lAllDog) {

 int i=  lAllDog.indexOf(lDog);
}
于 2013-03-18T16:21:08.970 に答える