code: public FilesFilterResult<T> filter(File[] files, FileFilter filter) {
  		List<File> acceptedFiles = new LinkedList<>();
  		if (files != null) {
  			Arrays.sort(files, sorter);
  			for (File file : files) {
  				if (filter.accept(file)) {
  					acceptedFiles.add(file);
  				}
  			}
  		}
  		final File[] filteredFiles = acceptedFiles.toArray(new File[acceptedFiles.size()]);
  		return new FilesFilterResult<T>() {
  			@Override
  			public List<T> list() {
  				return list(0, filteredFiles.length);
  			}
  			@Override
  			public List<T> list(int start, int count) {
  				return AbsFilesScanner.this.list(filteredFiles, start, count);
  			}
  			@Override
  			public Map<String, T> map() {
  				return map(0, filteredFiles.length);
  			}
  			@Override
  			public Map<String, T> map(int start, int count) {
  				return AbsFilesScanner.this.map(filteredFiles, start, count);
  			}
  			@Override
  			public Iterable<T> cursor() {
  				return AbsFilesScanner.this.cursor(filteredFiles);
  			}
  		};
  	}
docs: /* filter