如何使迭代器可重用?

时间:2019-05-25 14:25:34

标签: java

我的FileContent类具有arraylistOfChars和arraylistOfWords。 此类还实现了IterableText接口。 接口IterableText具有两个抽象方法:charIterator()和wordIterator()。这些方法返回Iterator。 它们在FileContent类中被重写,并分别返回arraylistOfChars.iterator()和arraylistOfWords.iterator()。

CharIterator类实现Iterator并覆盖两个方法:next()和hasNext()-相同的WordIterator类。这些类需要FileContent对象作为其构造函数中的参数。

StatisticalAnalysis类是一个数据集,并具有以下方法:

  • public int size()-返回所有单词或字符的数量。
  • public Set<String> occurMoreThan(Integer integer)-返回出现次数超过给定数字的单词或字符集。
  • public int countOf(String... strings)-返回所有字符串的数量。
  • public int dictionarySize()-返回数量不重复的单词或字符。

StatisticalAnalysis类需要在构造函数中将Iterator作为参数。

例如,当我在size方法中使用迭代器时,便无法再次使用它。 我该怎么做才能解决这个问题? 如何创建新的迭代器?

//StatisticalAnalysis class
private Iterator<String> iterator;

public StatisticalAnalysis(Iterator<String> iterator){
    this.iterator = iterator;
}

private static <String> Iterable<String> iterable(final 
                                             Iterator<String> it) {
    return new Iterable<String>() {
        public Iterator<String> iterator() {
            return it;
        }
    };
}

public int size() {
    int size = 0;
    for (String s : iterable(iterator)) {
        size++;
    }
    return size;
}

public Set<String> occurMoreThan(Integer integer) {
    for (String s : iterable(iterator)) {
        System.out.println(s);
    }
    return null;
}

我希望在StatisticsAnalysis类的所有方法中使用相同的迭代器访问列表。

0 个答案:

没有答案