使用Java迭代器實現Python中的range


如果要想迭代一個類的對象,那么該類必須實現 Iterable 接口,然后通過 iterator 方法返回一個 Iterator 實例。

Range 類實現了Python中的range的所有用法,如:range(10),range(5, 10),range(10, 0, -1),range(0, 10, 2)

如果再在 Range 類中定義靜態的工廠方法,然后再靜態導入工廠方法,就可以更方便地使用了。

使用實例:

for (int x : new Range(10, 0, -1)) {
    System.out.println(x);
}
/* 輸出:
10
9
8
7
6
5
4
3
2
1
*/

  

代碼:

class Range implements Iterable<Integer> {
    private final int start;
    private final int end;
    private final int step;

    public Range(int end) {
        this(0, end, 1);
    }

    public Range(int start, int end) {
        this(start, end, 1);
    }

    public Range(int start, int end, int step) {
        this.start = start;
        this.end = end;
        this.step = step;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new Itr();
    }
    private class Itr implements Iterator<Integer> {
        int current = start;
        @Override
        public boolean hasNext() {
            return step > 0 ? current < end : current > end;
        }

        @Override
        public Integer next() {
            int t = current;
            current += step;
            return t;
        }
    }
}

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM