For eachループを使用してArrayList
を繰り返していますが、ループの現在のインデックスを取得する方法がわかりません。
私はそれをグーグルでやったが、何も役に立たなかった。
誰かが現在のインデックスを取得する方法を教えてくれたら、ありがたいです。
従来のforループを使用するだけです。
for (int i = 0; i < yourArrayList.size(); i ++) {
// i is the index
// yourArrayList.get(i) is the element
}
ドアノブの答えを盗むが、そうでなければ海賊のように私を動かしてしまうような変更を加えるには:
int arraySize = yourArrayList.size();
for (int i = 0; i < arraySize; i ++) {
// i is the index
// yourArrayList.get(i) is the element
}
代わりに
int currentPosition = 0;
for (myItemType myItem :myArrayList) {
// do stuff
currentPosition++;
}
list.indexOf(objectYouWantToFind);
を使用して、コンテナ内にある場合はインデックスを取得できます。それ以外の場合は、-1
結果として。
従来のループを使用します。 JavaのFor-eachステートメントは、コレクションに対する順序を約束しません。実際にインデックスを知る唯一の方法は、反復ごとにリストを照会することです。
_for(int i=0; i<list.size; i++){
// you have your index, i
// the item is at list.get(i)
}
_
Iterator()実装に依存して、代替手段(コメント内で+1 Zak)を使用することもできます。
_int position = 0;
for(Item i : list){
// do stuff with `i`
// increase position as the last action in the loop
position++;
}
_
ドキュメントから:Iterator<E> iterator() Returns an iterator over the elements in this list in proper sequence
私は通常for
の短い形式を使用しない理由は次のとおりです。
_import Java.util.ArrayList;
import Java.util.Iterator;
public class MyList<T> extends ArrayList<T> {
// the main function to run the example
public static void main(String[] args){
// make a list of my special type
MyList<Integer> list = new MyList<Integer>();
// add 10 items to it
for (int i =0; i<10; i++){
list.add(i);
}
// print the list using the for-each mechanism (it's actually an iterator...)
for (Integer i : list){
System.out.println(i);
}
}
// I like lists that start at 3!
// make my list return an iterator in the middle of the list...
@Override
public Iterator<T> iterator(){
return this.listIterator(3);
}
}
_
明らかに、最初の反復で最初の項目があることを期待しますが、イテレータはさまざまな方法で実装でき、Javaのforeach
は基礎となるiterator
に依存するため、明らかにそうではありません実装。
また、ループの最後で_position++
_を使用する必要があります。これはおそらくエラーが発生しやすい(わかりません、しないでください)通常それを使用します..)。
とは言っても、このstackoverflowで言及されているように読みやすさは向上します question Javaのforeachについて。
詳細については、 Javaはどのように機能しますか? を参照してください。
リストを繰り返し処理する場合は、indexOf()メソッドを使用できます。例:
List<Animal> animals = new ArrayList<Animal>();
Animal a = new Animal();
a.setAnimalCode(1);
animals.add(a);
a = new Animal();
a.setAnimalCode(35);
animals.add(a);
a = new Animal();
a.setAnimalCode(12);
animals.add(a);
for(Animal a: animals)
if(animal.getAnimalCode()==35)
System.out.println("Index of chosen one: "+animals.indexOf(a));
選択したもののインデックス:2
ハッキングのようなものですが、for eachループには必ずインデックスを付けることができます。
public class Counter{
private Integer i;
public Counter(Integer i) { this.i = i; }
public void incrementOne(){ this.i = getI() + 1; }
//getter and setter for i
}
そして、for eachループのどこか別の場所:
Alien.Java
Counter counter = new Counter(0);
List<String> list = new ArrayList<>();
//have some values in the list
list.forEach(i-> {
//i will have the value and the counter will have the count!
System.out.println(counter.getI());
counter.incrementOne();
});
それ以外の場合は、常にlist.indexOf(i)があります。iはリスト内の各オブジェクトです。 :P