我在java采访中被问到这个问题.我给了一个整数列表的迭代器.我需要编写一个函数,返回将此迭代器作为参数,并仅返回偶数的迭代器.有人告诉我,我不能修改原始的数字列表.因此,从列表中删除奇数不是解决方案.请指教.谢谢.
Voo*_*Voo 10
那么你基本上只需要创建一个新的Iterator,它接受一个现有的Iterator并覆盖它的hasNext和下一个方法.唯一的困难是一个好的行为迭代器显然应该只占用O(1)空间,因此创建一个新的列表并使用它是糟糕的风格 - 因此我们需要一点簿记.类似下面的内容 - 没有错误处理的简化伪代码,假设null为无效值等等,但对于一些通用的解决方案 - 应该给你基本的想法:
Iterator<T> it;
T next;
NewIterator(Iterator<T> it) {
this.it = it;
setNext();
}
void setNext() {
while (it.hasNext()) {
T val = it.next();
if (validT(val)) {
next = val;
return;
}
}
next = null; // lets assume null is invalid.
}
boolean hasNext() {
return next != null;
}
T next() {
T ret = next;
setNext();
return ret;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |