Iterable Interface, Creating Own Iterable Class

Kategori: Java , 15 Temmuz 2019 , JanFranco


Bir list, set, stack vs. gibi veri yapıları oluşturduğumuzda Iterable sınıf yardımıyla direk bir iterator oluşturabilir ve kullanabiliriz. Peki gezinilecek yapı basit bir veri yapısı değil de bir sınıf olduğunda ne yapacağız? Cevap, kendi Iterable sınıfımızı oluşturacağız. Örnek üzerinden görelim, bir Radio sınıfı açalım:


import java.util.ArrayList;
import java.util.Iterator;

public class Radio implements Iterable<String> {

	private ArrayList<String> channelList = new ArrayList<String>();
	
	public Radio(String[] channels){
		
		for(String channel : channels){
			channelList.add(channel);
		}
		
	}
	
	public class RadioIterator implements Iterator<String>{

		private int index = 0;
		
		@Override
		public boolean hasNext() {
			 
			if(index < channelList.size()){
				return true;
			}
			else{
				return false;
			}
			
		}

		@Override
		public String next() {
			String value = channelList.get(index);
			index++;
			return value;
		}
		
	}

	@Override
	public Iterator<String> iterator() {
		
		return new RadioIterator();
		
	}
	
}
Implements Iterable diyerek, Iterable sınıfının constructorını zorunlu olarak implemente etmiş olduk. Constructor içinden bir Iterator sınıfından obje return etmemiz gerekli. Bu nedenle RadioIterator isminde bir sınıf açtık. Iterator sınıfını implemente ettiğimiz için, hasNext, next gibi methodları zorunlu olarak override ettik ve içlerini düzenledik. Kullanalım:

import java.util.Iterator;

public class Main_class {

	public static void main(String[] args){
		
		String[] channels = {"Radyo Viva", "Radyo Fenomen", "Radyo Number1", "Radyo AlemFM"};
		Radio radio = new Radio(channels);
		
		Iterator<String> iterator = radio.iterator();
		
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		
	}
	
}
Konsolda:

Radyo Viva
Radyo Fenomen
Radyo Number1
Radyo AlemFM


Sonraki Yazı: PriorityQueue
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın