从枚举中反复读取和返回数据块

时间:2017-09-27 10:23:38

标签: java algorithm enums

我有一个看起来像::

的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个文件。

我想要的是能够在调用myFunction()时返回接下来的100个文件。每100个文件将从之前结束的位置开始,直到 myFiles 中没有其他元素。

我用谷歌搜索但没有找到答案。我需要一点指导如何做到这一点。

感谢

1 个答案:

答案 0 :(得分: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;
     }
}