code: @Override
      public Iterator<I> iterator() {
  
          List<I> i = this.intervals;
  
          if (i == null) {
              Collector collector = new Collector();
              this.accept(collector);
              i = Collections.unmodifiableList(collector.visited);
              this.intervals = i;
          }
  
          return i.iterator();
  
      }
docs: /*[deutsch]
  <p>Sammelt alle gespeicherten Intervalle in eine neue Liste und liefert dann einen {@code Iterator}
  f&uuml;r diese Liste. </p>
  
  <p>Diese Methode ist nur sinnvoll, wenn Anwender alle gespeicherten Intervalle brauchen. Ansonsten
  ist eine benutzerdefinierte {@code Visitor}-Implementierung flexibler. </p>
  
  @return  an {@code Iterator} which is read-only