Java 经典实例:自定义迭代器详解编程语言

编写自己的Iterator,实现Iterator接口,这里多说一句,实现Iterable后,可以用“foreach”循环遍历你的对象。

import java.util.Iterator; 
import java.util.NoSuchElementException; 
 
/** 
 * 演示Iterator和Iterable接口,并说明怎样编写一个用于对象数组的简单迭代器。 
 */ 
public class AarrayIterator<T> implements Iterable<T>, Iterator<T> { 
    private final static String[] names = {"rose", "petunia", "tulip"}; 
 
    public static void main(String[] args) { 
        AarrayIterator<String> arrayIterator = new AarrayIterator<>(names); 
 
        // Java 5,6的方式 
        for (String s : arrayIterator) { 
            System.out.println(s); 
        } 
 
        // Java 8的形式 
        arrayIterator.forEach(System.out::println); 
    } 
 
    /** 
     * 要遍历的数据 
     **/ 
    protected T[] data; 
 
    protected int index = 0; 
 
    /** 
     * 构造一个AarryIterator对象。 
     * 
     * @param data 被迭代的对象数组 
     */ 
    public AarrayIterator(final T[] data) { 
        setData(data); 
    } 
 
    /** 
     * 设置(重置)数组为给定的数组,重置迭代器。 
     * 参数d代表被迭代的数组对象。 
     * 
     * @param d 被迭代的数组对象 
     */ 
 
    public void setData(final T[] d) { 
        this.data = d; 
        index = 0; 
    } 
 
    /** 
     * 如果不是末尾,返回true,例如,if next()语句将成功执行。 
     * 否则返回false,执行if next()语句会抛出异常。 
     * 
     * @return 
     */ 
    public boolean hasNext() { 
        return index < data.length; 
    } 
 
    /** 
     * 返回该数据的下一个元素 
     * 
     * @return 
     */ 
    public T next() { 
        if (hasNext()) { 
            return data[index++]; 
        } 
        throw new NoSuchElementException("only " + data.length + " elements"); 
    } 
 
    public void remove() { 
        throw new UnsupportedOperationException("This demo Iterator does not implement the remove method"); 
    } 
 
    /** 
     * Iterator的方法 
     * 
     * @return 
     */ 
    public Iterator<T> iterator() { 
        index = 0; 
        return this; 
    } 
}

执行结果:

rose 
petunia 
tulip 
rose 
petunia 
tulip

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15861.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论