2017-09-27 57 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; 
    } 
}