Google Guava has all this and more, and it doesn't require an extension to ArrayList, any Iterable will do.
http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html On Jan 15, 2012 3:59 AM, "Benedikt Ritter" <b...@systemoutprintln.de> wrote: > Hi, > > I have written a small extension for java.util.ArrayList, that allows for > qerrying Lists using (generic) predicates. In addition to that, I adapted > org.springframework.data.jpa.**domain.Specifications class as a util to > link predicates to queries. Here is how it works: > > QueryableList<Customer> qList = new QueryableArrayList<Customer>()**; > qList.addAll(getCustomers()); > qList.getAll(new Predicate<Customer>() { > > public boolean evaluate(Customer element) { > if (element.getLastName().**startsWith("B")) { > return true; > } else { > return false; > } > } > }); > > This will give you a List containing all customers, that match the given > predicate. Using the Query class, we can link predicates via AND and OR or > simply neglect them (the next example assumes, that we have a static import > of the not and where method and startsWith(String) and bornAfter(int) are > util methods, that return predicates): > > List<Customer> queryResult = qList.getAll(not(startsWith("**B"))); > queryResult = qList.getAll(where(startsWith(**"B")).or(startsWith("C"))); > queryResult = qList.getAll(where(startsWith(**"B")).and(bornAfter(1980))); > > In addition to that, there are implementations of common collection > methods using predicates: > > public boolean containsMatch(Predicate<E> predicate); > public Iterator<E> matchIterator(Predicate<E> predicate); > public boolean retainAllMatches(Predicate<E> predicate); > public boolean removeAllMatches(Predicate<E> predicate); > > ...and common list methods: > > public int indexOfMatch(Predicate<E> predicate); > public int lastIndexOfMatch(Predicate<E> predicate); > > I think QueryableCollections would fit nicely into commons collections, > because as far as I know, commons collections only offers you the > opportunity to validate if all elements in a collection match a given > predicate. There is no possibility to easily query for objects matching > some criteria. > Having that said, I would like to contribute all source code of > QueryableCollections. I am willing to make what ever changes are required. > > Here are some thinks that I think will need to be adjusted before > contribution: > - swtich from my generic Predicate implementation to > org.apache.commons.**collections.Predicate, > although I really would like to see generics in commons collections. It > saves you all the instanceof statements. > - As far as I can see commons collections does not extend classes from > java.util.* but decorates them. As I said QueryableArrayList is an > extension of ArrayList. If there is a general policy of not extending java > base classes, this would have to be changed. > - Re-Implement jUnit tests using jUnit 3.8.1 (instead of jUnit 4.1.0) > - change licence agreement von LGPL to Apache License > > All source code (and example code) is available at github: > HEAD: > https://github.com/britter/**QueryableCollections<https://github.com/britter/QueryableCollections> > v0.1.0: https://github.com/britter/**QueryableCollections/tree/** > stable-0.1.0<https://github.com/britter/QueryableCollections/tree/stable-0.1.0> > You can download a build from my blog: > http://www.systemoutprintln.**de/wp-content/uploads/** > collections-0.1.0.jar<http://www.systemoutprintln.de/wp-content/uploads/collections-0.1.0.jar> > > I'm really exited to hear what you guys think of QueryableCollections. > Regards > Benedikt Ritter > > ------------------------------**------------------------------**--------- > To unsubscribe, e-mail: > dev-unsubscribe@commons.**apache.org<dev-unsubscr...@commons.apache.org> > For additional commands, e-mail: dev-h...@commons.apache.org > >