迭代器及其用法

前言

在一次寫一個返回數據庫中未批改的做業的功能時,偶然接觸到了迭代器的概念。從倉庫層獲取全部做業,我想經過遍歷查找每一個做業Reviewed字段是否爲false,若是爲false,則遍歷中止,返回該做業。可是如何從全部做業中一個一個獲取做業呢。html

迭代器的使用

咱們獲取一個表中的全部字段是調用的倉庫層的findAll()方法,數據庫

Iterable<T> findAll();

我發現他放回的是Iterable<T>類型,我就去查了Iterable的意思,譯爲可迭代的。而後就去網上找Iterable容器使用方法。
下面說明一下它的使用
1.使用方法iterator()要求容器返回一個Iterator。咱們如今接收到的是可迭代的容器,使用iterator()方法變成迭代器。設計模式

Iterable<Work> works = workRepository.findAll();

Iterator iter = works.iterator()

如今咱們就得到了一個迭代器。
2.使用next()得到序列中的下一個元素。第一次調用Iterator的next()方法時,它返回序列的第一個元素。數組

Work nextWork = (Work)iter.next();

3.使用hasNext()檢查序列中是否還有元素。這樣咱們就能夠在for循環中加以判斷。.net

Iterable<Work> works = workRepository.findAll();
    for (Iterator iter = works.iterator(); iter.hasNext();) {
        Work nextWork = (Work)iter.next();
        if (nextWork.getReviewed() == false) {
            return nextWork;
        }
    }
    return null;
}

最後代碼,構造一個for循環,不斷地判斷下一個做業是否批閱過。用hasNext方法判斷迭代器是否到頭了。
4.使用remove()將迭代器新返回的元素刪除。這裏咱們沒有用到,這個方法而不經常使用。設計

迭代器

迭代器是一種設計模式,同時他也是一個對象,下面是他的部分源碼,咱們能夠看到他的三個方法。code

public interface Iterator<E> {
    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
}

迭代器就像一輛火車,咱們只能從車頭走向第二列車箱,從第二列車箱走向下一列車箱,而不能從車頭直接調到車尾。
咱們只能訪問他的下一個元素,這跟咱們的數組有所區別。所以,迭代器適合訪問鏈式結構。同時,它還能夠訪問沒有順序的集合。htm

總結

迭代器做爲一種設計模式,咱們無須考慮遍歷序列的底層結構,只要拿到這個對象,使用迭代器就能夠遍歷這個對象的內部。這使得咱們的遍歷與被遍歷對象分離。對象

參考

迭代器的使用
Java迭代器blog

相關文章
相關標籤/搜索