Benutzerspezifische Werkzeuge
Sie sind hier: Startseite ByteBlog Gefilterte Listen
Anmelden


Passwort vergessen?
 
Artikelaktionen

Gefilterte Listen

Filed Under:

sind keine Neuigkeit und daher auch schon von anderen Implementiert.

Ich wollte aus einer Liste von Elementen nur ganz bestimmte Elemente holen und über diese direkt iterieren. Da die Elemente immer wieder nach unterschiedlichen Kriterien gefiltert werden sollten, dachte ich mir dass ich das ja verallgemeinern könnte. Eventuell mit einem Filter Interface:

interface Filter<T> {
   boolean isCase(T element);
}

 Und einer allgemeinen Filterfunktion:

List<T> filterList(List<T> listOfElements, Filter<T> filter) {
   List<T> filteredElements = new ArrayList<T>();
   for (T element: listOfElements) {
      if (filter.isCase(element)) {
         filteredElements.add(element);
      }
   }
   return filteredElements;
}

 

 Dann habe ich einfach mal filter und list und java in google eingegeben und bin (natürlich) über andere Leute mit demselben Problem und ähnlichen Ansätzen gestossen.

Bei google-collections und bei den jakarta-commons (mit generics). Dort werden allerdings auch direkt schon Iteratoren bereitgestellt, die filtern können und vieles mehr.

 

Also auch diesmal muss man das Rad nicht neu erfinden. Schade :)

Bei google-collections heissen die Filter im übrigen Predicates.

Filter gibt es in Java schon seit einer ganzen Weile

Kommentar von Jörg Loosen am 01.03.2008 15:13
Z. B. den FileFilter (ich glaube, aus dem JDK 1.3 oder sogar früher). Da leitet man entweder eine Filterklasse von der Klasse FileFilter ab oder implementiert das entsprechende Interface. Im Interface ist nur die eine Methode "accept" interessant, die je nach übergebenem File entweder "true" oder "false" liefert. Die entsprechende Klasse wird häufig als private Klasse implementiert.

Siehe z. B.: http://java.sun.com/[…]/filechooser.html

FileFilter

Kommentar von Felix Schumacher am 01.03.2008 19:16
Aber der FileFilter ist eben ein ganz spezieller Fall. Mir ging es eher um allgemeine Listen, bzw. Collections. Und da habe ich im Standard JDK nichts gefunden.

Aber vielleicht bin ich auch einfach blind.