Когда-то давно делал это с помощью JavaCC:
filterCondition.jj для поиска в таблицах Vaadin-а, но можно применить и обычным коллекциям.
Пользователи фильтруют таблицы следующим образом:
1.
Value1,Value2,Value3 - фильтр по одному из трех значений
2.
Field1 = Value1 или (Field2 НЕ ПУСТО и Field3 > 5) - комплексный фильтр