建立自己的 Iterable

要像使用任何介面一樣建立自己的 Iterable,只需在介面中實現抽象方法即可。對於 Iterable,只有一個叫做 iterator()。但它的返回型別 Iterator 本身就是一個有三種抽象方法的介面。你可以返回與某個集合關聯的迭代器,也可以建立自己的自定義實現:

public static class Alphabet implements Iterable<Character> {

    @Override
    public Iterator<Character> iterator() {
        return new Iterator<Character>() {
            char letter = 'a';

            @Override
            public boolean hasNext() {
                return letter <= 'z';
            }

            @Override
            public Character next() {
                return letter++;
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Doesn't make sense to remove a letter");
            }
        };
    }
}

使用:

public static void main(String[] args) {
    for(char c : new Alphabet()) {
        System.out.println("c = " + c);
    }
}

新的 Iterator 應該帶有指向第一個專案的狀態,每次呼叫 next 都會更新其狀態以指向下一個專案。hasNext() 檢查迭代器是否在最後。如果迭代器連線到可修改的集合,則可以實現迭代器的可選 remove() 方法,以從基礎集合中刪除當前指向的項。