我有一些包含姓名和年龄的对象。然后,我建立了一个包含这些对象的哈希表。我为此哈希表编写了自己的接口,称为PeopleIterator和PeopleIterable以及Iteratorimplementation。一切都很好。
现在,我必须在该哈希表类中编写一个函数,该函数返回另一个名为StringIterable的接口,其中包含所有人民的姓名。
如果需要,我可以使用Collections Framework和helper类中的数据结构,但我什至不知道如何开始。
public class PeopleHashtable implements PeopleIterable{
private People[] people;
public StringIterable copyNames() {
}
}
public interface StringIterable extends java.lang.Iterable<String> {
StringIterator iterator();
}
答案 0 :(得分:0)
set和list是可迭代的。所以也许只返回诸如map.keySet()之类的东西。
答案 1 :(得分:0)
通过提供next()
和hasNext()
的实现来实现Iterator接口。
hasNext()只会返回true或false。就像检查当前数组索引到数组长度一样简单。
next()只是返回该索引处的元素并递增索引。
这是示例模板。
class MyClass implements Iterator<String> {
String[] foo ...;
private int index;
public Iterator<String> iterator() {
index = 0;
return this;
}
public boolean hasNext() {
//your code
}
public String next() {
//your code
}
}
答案 2 :(得分:0)
我认为您误解了这些要求。我认为copyNames
实际上应该返回Iterator<String>
而不是Iterable
。 Iterable
是您调用iterator()
才能获得Iterator
的东西。
我也同意约翰·克鲁格曼的评论是正确的。建议不要声明自定义接口,例如PeopleIterable
和StringIterable
。他们无济于事。
无论如何,这是copyNames
(方法名称的错误选择!)的简洁实现,假设它返回的是Iterator
而不是Iterable
。
public Iterator<String> copyNames() {
return Arrays.stream(people).map(p -> p.getName()).iterator();
}
如果您确实需要Iterable
...。
public Iterable<String> copyNames() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return Arrays.stream(people).map(p -> p.getName()).iterator();
}
}
}