我有一个类的例子,witch私有字段Hashmap<Integer, CustomObject>。我的目标是使用Iterable接口访问这个类中的所有CustomObject实例。首先,我声明Example来实现Iterable<CustomObject>。然后我调用iterator()方法。但是,我不知道是否应该指定hasNext()等,在主代码中放入什么?这是我到目前为止所知道的:
public class Example implements Iterable<Songs>{
private HashMap <Integer, CustomObject>;
@Override
public Iterator<CustomObject> iterator() {
for (CustomObject customObject: this){
System.out.println(customObject);
}
public static void main(String[] args) {
Example.iterator();
}发布于 2020-10-05 00:34:08
实际上,HashMap有一个方法Map::values(),它以Collection的形式返回值的集合,而实际上是一个 Iterable<T> (因此可以返回一个Iterator<T>)。
Map<Integer, CustomObject> map = new HashMap<>();
Iterator<CustomObject> iterator = map.values().iterator();此外,您的代码有几个错误:
private HashMap <Integer, CustomObject>;缺少字段名,并且可能缺少您必须覆盖public Iterator<CustomObject> iterator()的initiation.Iterable<Songs>。我想您的意思是class Example implements Iterable<CustomObject>.Iterable::iterator不是一个静态方法,所以您不能调用Example.iterator();.一个完整的例子假设Example是HashMap map的一个可迭代委托,就像在你的类中一样(你忘了命名它,否则它不会编译和初始化它),然后你可以这样做:
public class Example implements Iterable<CustomObject> {
private Map<Integer, CustomObject> delegate = ...; // initialize + data
@Override
public Iterator<CustomObject> iterator() {
return this.delegate.values().iterator();
}
}并在这些代码片段中使用:
Example is-a Iterable,它就可以与增强循环一起使用: for (CustomObject customObject: new Example()) { // Iterable with enhanced loop System.out.println(customObject);}通过实际示例进行迭代:迭代器迭代器= Example().iterator();while (iterator.hasNext()) { System.out.println(iterator.next());}
只要每个示例都返回它的
(Spliterator().spliterator(),false),就会从新示例到新示例
https://stackoverflow.com/questions/64197125
复制相似问题