【发布时间】:2009-12-08 18:45:25
【问题描述】:
我在使用内部 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 会更干净。这是矫枉过正,还是有其他方法可以做到?
【问题讨论】:
标签: java iterator dry software-design inner-classes