Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代器设计模式的实现_Java_Design Patterns_Iterator_Iterable - Fatal编程技术网

Java 迭代器设计模式的实现

Java 迭代器设计模式的实现,java,design-patterns,iterator,iterable,Java,Design Patterns,Iterator,Iterable,我有一个私有字段Hashmap的类示例。我的目标是使用Iterable接口访问此类中CustomObject的所有实例。首先,我声明了实现Iterable的示例。然后我调用iterator()方法。但是,我不知道是否应该指定hasNext()等,在主代码中放置什么?以下是我到目前为止的情况: public class Example implements Iterable<Songs>{ private HashMap <Integer, CustomObject>;

我有一个私有字段
Hashmap
的类示例。我的目标是使用
Iterable
接口访问此类中
CustomObject
的所有实例。首先,我声明了实现
Iterable
的示例。然后我调用
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();
  }
公共类示例实现了Iterable{
私有HashMap;
@凌驾
公共迭代器迭代器(){
对于(CustomObject CustomObject:此){
System.out.println(customObject);
}
公共静态void main(字符串[]args){
例如,迭代器();
}

实际上
HashMap
有一个方法,该方法返回一个值集合作为,而实际上是一个
(因此可以返回一个
迭代器

并在以下任何代码段中使用:

  • 只要
    示例
    是一个
    可编辑的
    ,那么它就可以与增强循环一起使用:
    for (CustomObject customObject: new Example()) {   // Iterable with enhanced loop
        System.out.println(customObject);
    }
    
  • 通过实际的
    迭代器
    Iterator<CustomObject> iterator = new Example().iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
    
    StreamSupport.stream(new Example().spliterator(), false)
                 .forEach(System.out::println);
    

感谢您的回复,我被要求应用迭代器设计模式。这是否满足该要求?我会在我的主要方法中添加上述代码吗?谢谢,这是学校作业吗?我的代码片段显示了通过JDK使用现有的
迭代器
模式实现的情况。如果您需要实现ne,我从这里开始:。说“需要应用迭代器”对我来说有点模糊,如果我是你,我会向老师询问细节。因此……我的回答在用法上没有错,但这取决于上下文和实际需求。在任何情况下,你现在都有你的资源。
Iterator<CustomObject> iterator = new Example().iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
StreamSupport.stream(new Example().spliterator(), false)
             .forEach(System.out::println);