Software Engineering

Filteriterator

 aufwärts

Oft kommt es vor, dass beim Durchlaufen einer Folge mit einem Iterator nur diejenigen Elemente zurück­gegeben werden sollen, die einer bestimmten Bedingung genügen. Die anderen Elemente sollen übersprungen werden sollen. Zum Beispiel soll eine ArrayList durchlaufen werden, wobei aber Einträge mit dem Wert null übersprungen werden.

Ein solcher Iterator ist ein Filter­iterator.

Ein Filter­iterator benutzt einen Basis­iterator (im Beispiel den normalen ArrayList-Iterator) und eine Filter­funktion, die dafür sorgt, dass nur die gewünschten Elemente zurück­gegeben werden (im Beispiel also nur diejenigen Elemente, die nicht null sind).

Es gibt verschiedene Möglich­keiten, dem Filter­iterator mitzuteilen, welchen Basis­iterator und welche Filter­funktion er benutzen soll. Die eine Möglichkeit ist, ihm im Konstruktor einen Basis­iterator und ein Filterobjekt, das die Filter­funktion enthält, zu übergeben.

Eine andere Möglichkeit ist, dem Filter­iterator nach dem Bridge-Entwurfs­muster ein Behavior zu übergeben, das den Basis­iterator und die Filter­funktion enthält (Bild 1). Das Behavior enthält auch gleich noch eine Factory-Methode, um den so gebildeten Iterator zu erzeugen. Diese Möglichkeit wird im Folgenden dargestellt. Sie wird auch bei der Konstruktion eines Compound-Iterators verwendet.

Bild 1: Klassendiagramm eines Filteriterators mit dem konkreten Behavior NotNullElements
Bild 1: Klassendiagramm eines Filteriterators mit dem konkreten Behavior NotNullElements

Nur die blau dargestellte Klasse NotNullElements ist vom Anwender zu schreiben (siehe nächster Abschnitt). Hierzu ist lediglich ein Basis­iterator (hier der Standard-Iterator von ArrayList) anzugeben und eine Filter­funktion zu implementieren.

Die folgenden Programm­beispiele verwenden zunächst keine Typ-Parameter. Die benötigten Import-Anweisungen für Iterator und ArrayList sind der Kürze halber weggelassen.

Behavior NotNullElements

Ein Behavior, das einen Filter­iterator erzeugt, wird von der abstrakten Klasse FilterIteratorBehavior abgeleitet. Diese sorgt dafür, dass ein Basis­iterator und eine Filter­funktion vorhanden sind und stellt die Factory-Methode iterator zur Verfügung.

Auf Grundlage dieser abstrakten Klasse ist das Behavior NotNullElements gebildet. Es erzeugt einen Filter­iterator, der eine ArrayList durchläuft und dabei null-Einträge überspringt. Im Konstruktor wird der Klasse die zu durch­laufende ArrayList übergeben. Dann werden die abstrakten Methoden der Basisklasse implementiert – die Methode baseIterator gibt den Basis­iterator an und die Methode pass stellt die Filter­funktion dar.

public class NotNullElements extends FilterIteratorBehavior
{
    private ArrayList a;

    public NotNullElements(ArrayList a_)
    {
        a=a_;
    }

    // base iterator
    @Override
    public Iterator baseIterator()
    {
        return a.iterator();    // standard iterator of ArrayList
    }

    // filter function
    @Override
    public boolean pass(Object o)
    {
        return o!=null;
    }

}

Anwendung

Die folgende Main-Funktion der Klasse TestNotNullElements testet den Filter­iterator. Sie gibt nur die Einträge "1", "2" und "3" aus.

public class TestNotNullElements
{
    public static void main(String[] args)
    {
        ArrayList a=new ArrayList();
        a.add(null);
        a.add("1");
        a.add(null);
        a.add("2");
        a.add(null);
        a.add(null);
        a.add("3");
        a.add(null);

        Iterator it=new NotNullElements(a).iterator();
        while (it.hasNext())
            System.out.println(it.next());
    }
}

Zusammenfassung

Die konkret benötigte Funktionalität eines Filter­iterators wird in einem Behavior (hier NotNullElements) festgelegt. Dies geschieht durch Angabe eines Basis­iterators und einer Filter­funktion.

Zugrunde­gelegt werden dabei getestete Implementierungen der Klassen FilterIterator und FilterIteratorBehavior. Diese finden sich auch im Java-Archiv de.fh-flensburg.inf.lang.iterators-untyped.jar.

 

Weiter mit:  [Compound-Iterator]  [Filteriterator mit Typ.Parametern]  oder   up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   ©   Created: 05.02.2008   Updated: 03.03.2017
Valid HTML 4.01 Transitional

Hochschule Flensburg
Campus Flensburg

Informatik in Flensburg studieren...

 

Neu gestaltetes Studienangebot:

Bachelor-Studiengang
Angewandte Informatik

mit Schwerpunkten auf den Themen Software, Web, Mobile, Security und Usability.

Ihr Abschluss
nach 7 Semestern:
Bachelor of Science

 

Ebenfalls ganz neu:

Master-Studiengang
Angewandte Informatik

Ein projektorientiertes Studium auf höchstem Niveau mit den Schwerpunkten Internet-Sicherheit, Mobile Computing und Human-Computer Interaction.

Ihr Abschluss
nach 3 Semestern:
Master of Science

 

Weitere Informatik-Studienangebote an der Hochschule Flensburg:

Medieninformatik

Wirtschaftsinformatik