FilterList, Matcher, and MatcherEditor

To do filtering you'll need:

  1. A FilterList, a TransformedList that filters elements from a source EventList. As the source changes, FilterList observes the change and updates itself automatically.

  2. 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.

Note

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.