• Die Mitarbeiter von open knowledge waren sowohl aus fachlicher als auch aus menschlicher Sicht eine Bereicherung für unser Migrations-Projekt. Insbesondere die hohe Qualifikation, die ausgepgrägte Lösungsorientierung sowie die partnerschaftliche Zusammenarbeit, die die Berater täglich im Projekt gezeigt haben, waren ein Schlüssel für die termingerechte und qualitätsgesicherte Fertigstellung der Migration. Dirk Feuerhelm, Projektleiter, Bertelsmann AG
  • … besonders beeindruckt hat mich die ganzheitliche Lösungskompetenz, ich meine damit die Fähigkeit von open knowledge, über das Verständnis für unsere komplexe Prozess- und IT-Welt und der Moderations- und Integrationsstärke in fachlichen und technischen Konzept-Workshops zu einer IT-technisch state-of-the-art-Lösung zu gelangen, die gleichzeitig ein Massanzug und offen und flexibel ist … Wolfgang Rosenow, Projektleiter T-Systems DDM GmbH
  • Die kompetente Betreuung durch open knowledge hat uns den Umstieg auf die JAVA-Plattform bei der Neuentwicklung von unternehmenskritischen Applikationen leicht gemacht. Gernot Weissensteiner, Entwicklungsleiter Österreichische Lotterien Ges.m.b.H.
  • open knowledge hat uns oft und kompetent im Bereich mobiler Technologien beraten. Lars Röwekamp und sein Team zeichnen sich aus durch tiefes Know-how, ein Gespür für pragmatische Lösungen und großes Commitment. Ein Gewinn für jedes Projekt! Eckhard Schneider, CTO, Interone GmbH
  • Die partnerschaftliche Zusammenarbeit mit open knowledge hat sich für uns in vielfältigen Themenstellungen bewährt. Hervorzuheben ist insbesondere die gesunde Mischung aus umfangreichem Know-How in den Bereichen Fachkompetenz sowie Methoden- und IT-Kompetenz der open knowledge-Mitarbeiter. Dies ermöglichte uns in allen Projektphasen, gemeinsam mit den Fachbereichen schnell und effizient Lösungen zu erarbeiten und stellt damit einen echten Mehrwert dar. Hermann Pollkläsener, Leitung IT, Deutsche Post Adress GmbH & Co. KG
  • Im Rahmen der langjährigen Zusammenarbeit haben wir die Mitarbeiter von open knowledge als kompetente und erfahrene Unterstützung für unsere internationalen Projekte schätzen gelernt. Besonders hervorzuheben ist auch die Flexibilität, wenn kurzfristig Unterstützung erforderlich gewesen ist. Dr. Ralf Wieting, Bereichsleiter Applikationsentwicklung & Online-Betrieb, CEWE Stiftung & Co. KGaA

Looping Iterator

07.05.2012 // 10:00 Uhr // Kategorie: Java SE, Tipps & Tricks // Von: Frank Bruns

Ist Ihnen folgendes Problem bereits begegnet? Sie möchten eine Java-Collection mit einer vordefinierten Anzahl von Elementen füllen, die aus dem Datenpool einer Quell-Collection übernommen werden sollen.

Intuitiv würden wir über die Quell-Collection iterieren und ein Element nach dem anderen in die Ziel-Collection übertragen, bis wir die Ziel-Collection mit der gewünschten Menge an Elementen befüllt haben.

Doch was können wir tun, wenn die Quell-Collection über zu wenige Elemente verfügt, um eine solche Schritt-für-Schritt-Übernahme der Elemente durchzuführen, weil Sie z.B. nur drei Elemente beinhaltet, aber wir die Ziel-Collection mit zehn Elementen füllen wollen?

Kommt es uns nicht darauf an, nur unterschiedliche Elemente in die Ziel-Collection aufzunehmen, können wir uns genügend Elemente verschaffen, in dem wir mit der Datenübernahme stets wieder am Anfang der Quell-Collection ansetzen, sobald ihr Ende erreicht wurde.
Iteriert man mit dem gewöhnlichen Java-Standard-Iterator oder der For-Each-Schleife über die Quell-Collection, gerät man jedoch recht schnell in die Verlegenheit, sperrigen Code schreiben zu müssen, um das Auslesen der Quell-Collection von vorn beginnen zu lassen. Erschwerend hinzu kommt eventuell die Beachtung von NoSuchElementExceptions beim Iterieren.

Glücklicherweise beschert uns das "Apache Commons Collections"-Projekt[1] eine nützliche Iterator-Implementierung, die unser Szenario elegant löst.
Mit der Klasse LoopingIterator[2] ist es möglich, eine Collection kontinuierlich zu durchlaufen, ohne selbst dafür sorgen zu müssen, dass am Ende eines Iterationszykluses der Durchlauf von vorn beginnt. Das geschieht automatisch durch den Iterator.

Es folgt ein einfaches Code-Beispiel, welches dem beschriebenen Szenario nachempfunden ist:

 // create the source list with three items
  List<Item> source = new ArrayList<Item>();
  source.add(new Item("itemOne"));
  source.add(new Item("itemTwo"));
  source.add(new Item("itemThree"));


  // Create the target list we would like to fill up with ten items
// from the source list.
  List<Item> target = new ArrayList<Item>();

  // Create the looping iterator for the source list.
  // Please note the constructor argument. It allows the iterator to
  //
manage the reference to the source list by itself.
  Iterator<Item> iter = new LoopingIterator(source);

  // Add exactly ten items to the target list.
  for (int i = 0; i < 10; i++) {
    // No hasNext() check or NoSuchElementException handling
    //
necessary, since the iterator automatically restarts at
    //
the beginning of the list in case its end has been reached.
    target.add(iter.next());
  }




Gegenüber dem Standard-Iterator hat der Looping-Iterator den Vorteil, dass er die Referenz auf seine Liste per Konstruktor-Argument selbst verwaltet. Iterator und Liste können hierdurch bei Bedarf leicht in unterschiedliche Methoden ausgelagert werden, ohne dass es, wie beim Standard-Iterator, zu sperrigen Abhängigkeiten wegen der Iterator-Reinitialisierung käme.

Der Vollständigkeit halber sei gesagt, dass die gegenwärtige Release-Version von "Apache Commons Collections" (3.2.1) noch keine Typsicherheit á la Generics bietet, wie sie mit Java-SDK 1.5 eingeführt wurde. Eine entsprechend aktualisierte Version der Bibliothek sei jedoch in Arbeit[3].

Eine weiterführende Betrachtung des Looping-Iterators findet sich auch hier[4].

Referenzen

[1] http://commons.apache.org/collections/
[2] org.apache.commons.collections.iterators.LoopingIterator
[3] http://wiki.apache.org/commons/Collections
[4] http://www.discursive.com/books/cjcook/reference/collections-sect-use-looping

Keine Einträge

Schreiben Sie den ersten Kommentar!

Kommentar hinterlassen:

Ihr Kommentar wird nach Prüfung freigeschaltet.

News

JAX 2014

Die JAX - Konferenz für Enterprise-Technologien, agile Methoden und Software-Architekturen - findet vom 12. bis 16. Mai 2014 in Mainz statt. open knowledge stellt mit Lars Röwekamp, Jens Schumann und Arne Limburg drei Speaker, die sich in ihren Sessions intensiv mit Java EE beschäftigen.
mehr ...

oben
Blog RSS-Feed