Bir koleksiyon boyunca yinelemek için bir Yineleyici kullanıyorum ve geçerli öğenin dizinini almak istiyorum.
Bunu nasıl yapabilirim?
Bir koleksiyon boyunca yinelemek için bir Yineleyici kullanıyorum ve geçerli öğenin dizinini almak istiyorum.
Bunu nasıl yapabilirim?
Yanıtlar:
Kendi değişkeninizi kullanın ve döngüde artırın.
it.nextIndex(). Koleksiyon bir Liste olduğunda kullanışlıdır.
Aynı soruyu sordum ve bir ListIterator kullanarak çalıştım. Yukarıdaki teste benzer:
List<String> list = Arrays.asList("zero", "one", "two");
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
Aslında nextIndex'i () elde etmeden ÖNCE çağırdığınızdan emin olun.
İşte bunu kendi değişkeninizi kullanarak ve kısa tutmanın bir yolu:
List<String> list = Arrays.asList("zero", "one", "two");
int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
String s = it.next();
System.out.println(i + ": " + s);
}
Çıktı (tahmin ettiniz):
0: zero
1: one
2: two
Bunun avantajı, döngü içinde indeksinizi artırmamanızdır (her döngüde yalnızca bir kez Yineleyici # çağırmaya dikkat etmeniz gerekse de - sadece en üstte yapın).
asList("zero", "one", "two")
ListIteratorSayma yapmak için kullanabilirsiniz :
final List<String> list = Arrays.asList("zero", "one", "two", "three");
for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
final String s = it.next();
System.out.println(it.previousIndex() + ": " + s);
}
Ne tür bir koleksiyon? Liste arayüzünün bir uygulamasıysa, sadece kullanabilirsiniz it.nextIndex() - 1.
Koleksiyon boyunca yinelemek için bir ListIterator kullanın . Koleksiyon bir Liste değilse, Arrays.asList(Collection.toArray())önce onu bir Listeye dönüştürmek için kullanmaya başlayın .
sadece bunun gibi bir şey yap:
ListIterator<String> it = list1.listIterator();
int index = -1;
while (it.hasNext()) {
index++;
String value = it.next();
//At this point the index can be checked for the current element.
}
Bir int kullanın ve döngünüz içinde artırın.
Buraya bakın .
iterator.nextIndex()sonraki çağrı ile döndürülecek eleman indeksini sağlar next().
Yineleyicinin üzerinde bulunduğu geçerli dizini döndürmek için onu kullanmanız gereken tek şey iterator.nextIndex (). Bu, kendi sayaç değişkeninizi kullanmaktan biraz daha kolay olabilir (yine de çalışır).
public static void main(String[] args) {
String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
List<String> list1 = new ArrayList<String>(Arrays.asList(str1));
ListIterator<String> it = list1.listIterator();
int x = 0;
//The iterator.nextIndex() will return the index for you.
while(it.hasNext()){
int i = it.nextIndex();
System.out.println(it.next() + " is at index" + i);
}
}
Bu kod, list1 listesinden her seferinde bir öğe geçer ve öğenin metnini yazdırır, ardından "indekstedir" ve ardından yineleyicinin bulduğu indeksi yazdırır. :)
Cevabı zaten almış olmanıza rağmen, biraz bilgi eklemeyi düşündüm.
Koleksiyonlardan açıkça bahsettiğiniz gibi, listIteratortüm koleksiyon türleri için indeksi almak için kullanamazsınız .
Arayüzleri listeleyin - ArrayList, LinkedList, Vector ve Stack.
Hem iterator()ve hem delistIterator()
Arayüzleri ayarlayın - HashSet, LinkedHashSet, TreeSet ve EnumSet.
Sadece var iterator()
Harita arayüzleri - HashMap, LinkedHashMap, TreeMap ve IdentityHashMap
Yineleyici içermez, ancak keySet()/ values()veya entrySet()olarak kullanılarak yinelenebilir keySet()ve entrySet()döner Setve values()dönerCollection .
Bu nedenle, iterators()herhangi bir koleksiyon türü için geçerli dizini elde etmek için bir değerin sürekli artışıyla kullanılması daha iyidir .