Java
Iterable
Iterable ile for-each desteğini öğrenirsin.
Iterable<T> arayüzü
Iterable<T>, bir sınıfın for-each döngüsünde kullanılabilmesini sağlayan arayüzdür. Iterator<T> iterator() metodunu uygulayan her sınıf Iterable olur. List, Set ve Queue arayüzlerinin hepsi Iterable'ı miras alır.
Kendi sınıfına Iterable uygulayınca for (String s : myObject) döngüsü çalışır. Bu, koleksiyon olmayan bir yapıyı da dolaşılabilir kılar; örneğin bir ağaç, satır listesi ya da sayı aralığı Iterable yapılabilir.
Özel Iterable örneği
Bir Names sınıfı Iterable<String> uyguladığında şöyle çalışır: içinde List<String> items alanı tutar, iterator() metodu items.iterator() döndürür. Dışarıdan for (String n : names) yazıldığında Java bu metodu çağırır.
Bu yöntem, iç veriyi gizleyip yalnızca okuma erişimi vermenin temiz bir yoludur. Kullanıcı listeyi doğrudan göremez ama Iterator üzerinden dolaşabilir. Sıfırdan Iterator yazmak gerekmez; iç liste zaten Iterable'dır.
Uygulama Özel Iterable sınıfı yaz
class Names implements Iterable<String> tanımla. İçinde List<String> items = new ArrayList<>(); alanı tut; void add(String n) metodu items.add(n); yapsın. @Override public Iterator<String> iterator() metodu items.iterator() döndürsün. main içinde Names names = new Names(); oluştur, iki isim ekle, for (String n : names) System.out.println(n); ile yazdır.
Örnek çözümü göster
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
class Names implements Iterable<String> {
List<String> items = new ArrayList<>();
void add(String n) { items.add(n); }
public Iterator<String> iterator() { return items.iterator(); }
}
public class Main {
public static void main(String[] args) {
Names names = new Names();
names.add("Ayşe");
names.add("Alex");
for (String n : names) {
System.out.println(n);
}
}
}
Kendini test et
-
Bir sınıf Iterable olduğunda ne kazanırsın?
- Comparable yeteneği
- Sıralama yeteneği
- for-each döngüsü desteği
- Çoklu kalıtım
Cevabı göster
for-each döngüsü desteği — Iterable uygulayan sınıf for-each ile dolaşılabilir.
-
Sınıf bildirimini tamamla
class Names implements Iterable<String> {
public Iterator<String> ____() {
return items.iterator();
}
}
Cevabı göster
class Names implements Iterable<String> {
public Iterator<String> iterator() {
return items.iterator();
}
}
-
Iterable kavramlarını eşleştir
- Iterable<T>
- for-each izni veren arayüz
- iterator()
- Tek zorunlu metot
- List
- Iterable mirascısı
- for-each
- Kısa döngü sözdizimi
Sıradaki ders: Spliterator