Details
-
Improvement
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
Description
In my current project I created a set of new Predicates that I call as Property Predicates. These predicates can used to filter a collection based on property values.
For example we have :
Class Foo{
String name;
Int age;
Address address;
}
Address{
String street;
String zip;
}
Collection<Foo> myFoos ;
And we want to find all the Foo in myFoos with name that starts with A, and age > 40 and who are living at Zip 07095 we can create a Predicate like follows:
Predicate p = new PropertyLikePredicate("name","A*")
.andGreaterThan("age",40)
.andEquals(address.zip,"07095");
Note: Like supports wildcards '*' and '?'
What is even better is that these predicates work with collections too. What I mean is if we have :
FooBar{
String name;
Collection<Address> addresses;
}
And you want to locate someone with a zip 07095 as part of anyof its' addresses all we need is to create a predicate :
Predicate p = new PropertyEqualsPredicate("addresses[].zip","07095");
My Predicate chain currently supports the following features:
1. andEquals
2. orEquals
3. andNotEquals
4. orNotEquals
5. andLike
6. orLike
7. andGreatorThan
8. orGreatorThan
9. andGreatorThanOrEquals
10. orGreatorThanOrEquals
11. andLessThan
12. orLessThan
13. andLessThanOrEquals
14. orLessThanOrEquals
15. isNull
16. isNotNull
17. orNull
18. orNotNull
19. orNullOrEmpty
20. orNotNullOrEmpty
21. andNullOrEmpty
22. andNotNullOrEmpty
All features have accompanying testcases. In my opinion this is a powerful addition to the functors and I would like to contribute this work to the commons-collection.