【发布时间】:2020-11-09 15:46:57
【问题描述】:
我目前正在尝试实现 Iterator,它接收一个集合和一个 char 并产生 以该字符开头的字符串。 所以我最终得到了以下(工作)代码:
class A {
public static void main (String [] args) {
String [] arr = {"abcd","gr","gres","bvg","bb"};
class FirstCharIt implements Iterator<String> {
char c;
private Iterator<String> it;
public FirstCharIt (Collection<String> lst,char c) {
this.c = c;
this.it = lst.stream().filter(x->{
return (x.charAt(0)==this.c);
}).iterator();
}
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public String next() {
return it.next();
}
public Iterator<String> get () {
return it;
}
}
FirstCharIt it1 = new FirstCharIt(Arrays.asList(arr),'b');
for (it1.get();it1.hasNext();) {
System.out.println(it1.next());
}
}
}
虽然这段代码正在运行,但这实际上并不是实现迭代器接口,我什至可以从我的课程标题中删除“实现迭代器”。
当然,get 方法在更多正确实现中并不存在
所以我想对我在这里所做的事情提出一些建议, 谢谢
【问题讨论】:
-
如果您已经在使用 Streams,则无需实现自己的迭代器类。只需返回一个
stream.map(…).iterator()实例。 -
“虽然这段代码正在运行,但这实际上并没有实现 Iterator 接口” - 是的。 “我什至可以从我的类标题中删除‘实现迭代器’”——该声明对于实现任何接口的任何类都是正确的,所以我不确定你为什么提到它。
-
@Eran :我的意思是,例如,如果我有参数为 1.List
l, 2.Iterator i 的方法,那么如果我将删除 '实现..'部分来自我的课程,它不会通过编译。 -
@AndyTurner,Miha_x64 是的,我明白了。但是有什么方法可以将我的代码更改为正常的 Iterator 类?
-
你的意思是有
for(String nxt: it1){...}也许你想实现Iterable