2017-09-27 53 views
0

我有一個Java功能,看起來像::重複讀取和返回數據塊從枚舉

public List<File> myFunction(){ 
    Enumeration<File> myFiles = enumFiles(); 
    int i = 0; 
     while(myFiles.hasMoreElements() && i < 50){ 
      // i will add the element to an arraylist here 
      i++; 
     } 

    return "100 files from myFiles" 
} 

其中enumFiles()返回文件的枚舉。文件列表可以是數千或數百萬。我正在使用hasMoreElements()nextElement()來讀取前50個文件。

我想要的是可以讓任何時候返回下一個100個文件,只要myFunction()被調用。每個100個文件將從之前結束的地方開始,直到myFiles中沒有更多元素。

我已經使用了Google,但沒有找到答案。我需要一個小方向如何去做。

謝謝

回答

0

你可能想要一個你自己的迭代器。

class LimitedIterator<T> implements Iterator<List<T>> { 
    private int chunkSize; 
    private Iterator<T> baseIterator; 
    public LimitedIterator(Iterator<T> base, int size) { 
     baseIterator = base; 
     chunkSize = size; 
    } 
    public boolean hasNext() { 
     return baseIterator.hasNext(); 
    } 
    public List<T> next() { 
     List<T> result = new ArrayList<>(chunkSize); 
     for (int i = 0; i < chunkSize && baseIterator.hasNext(); i++) { 
      result.add(baseIterator.next(); 
     } 
     return result; 
    } 
}