To do filtering you'll need:
A FilterList, a TransformedList that filters elements from a source EventList. As the source changes, FilterList observes the change and updates itself automatically.
An implementation of the Matcher interface, which instructs FilterList whether to include or exclude a given element from the source EventList.
This is all you'll need to do static
      filtering - the filtering criteria doesn't ever change. When you need to
      do dynamic filtering you'll need a
      MatcherEditor. This interface allows you to fire
      events each time the filtering criteria changes. The
      FilterList responds to that change and notifies
      its listeners in turn.
The main difference between Matchers and
        MatcherEditors is that
        Matchers should be immutable whereas
        MatcherEditors can be dynamic. The motivation
        for the distinction lies in thread safety. If
        Matchers were mutable, filtering threads and
        Matcher editing threads could interfere with one another.