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 Matcher
s and
MatcherEditor
s is that
Matcher
s should be immutable whereas
MatcherEditor
s can be dynamic. The motivation
for the distinction lies in thread safety. If
Matcher
s were mutable, filtering threads and
Matcher editing threads could interfere with one another.