gpt4 book ai didi

Java内部类迭代器问题

转载 作者:行者123 更新时间:2023-11-29 06:25:38 25 4
gpt4 key购买 nike

我在使用内部 Iterator 时遇到困难。

private List<List<? extends HasWord>> sentences = new ArrayList<List<? extends HasWord>>(); 
private Iterator<String> wordIterator = new Words();
private class Words implements Iterator<String> {

int currSentence = 0;
int currWord = 0;

@Override
public boolean hasNext() {
return currSentence != sentences.size() - 1 && currWord != sentences.get(currSentence).size() - 1;
}

@Override
public String next() {
String nextWord = sentences.get(currSentence).get(currWord).word();
currSentence++;
currWord++;

return nextWord;
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}

}

然后,我尝试遍历它:

for (String s : wordIterator) { //Error: Can only iterate over an array or an instance of java.lang.Iterable
words.add(s);

但它不起作用。 (请参阅有问题的行上注释的编译器错误)。我在这里做错了什么?

根据工程说明,解决我的问题的正确方法是什么?我有一堆这种形式的循环:

    for (List<? extends HasWord> sent : sentences) {
for (HasWord token : sent) {
//do stuff
}
}

所以我决定 Iterator 会更简洁。这是矫枉过正,还是有其他方法可以做到?

最佳答案

有两个嵌套的 for 从根本上没有错循环执行此操作,但我认为这会更干净:

public class Words implements Iterator<String> {
private final Iterator<HasWord> sentences;
private Iterator<String> currentSentence;

public boolean hasNext() {
return currentSentence.hasNext() || sentences.hasNext();
}

public String next() {
if (currentSentence.hasNext()) {
return currentSentence.next();
}
currentSentence = sentences.next();
return next(); // will return the first word of the next sentence
}
//remove() omitted for brevity
}

每当你需要一个遍历几个句子的迭代器时,返回这个类的一个新实例,并初始化 sentences字段使用 sentences.iterator();

(更仔细阅读您的问题后编辑)

关于Java内部类迭代器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com