Hi all, (I looked at various FAQ's and some previous mailing list answers to "I want to contribute" and I hope I do it right ;)
I'm a fan of collections and use it all over the place, but have a two of functions I'd like to propose. I use these functions in some operations of Collections of Maps that are returned by our database layer at work. (The proposed code, however, is not the property of the company - it was specially developed for including in the commons project.) I'm not sure if org.apache.commons.collections.functors is the best place for these, but the map package seemed to be only Map implementations, so the functors package seemed like a better home. Tho I was surprised to see no TestCases in the functors package. The indexing operation has come in handy when sending DB results out to a JSP - transforming it this way allows easy keyed access to each record. The partitioning operation is useful when we need to bucket groups of records. In each case, it could be argued that, given a large enough collection, someone would not want to repeat the traversal of the collection if they were going to do addition per-record processing, but the same could be said for a lot of the Transformer implementations. They're great commodity operations. Links are provided to my proposed implementations and test cases below: http://fe4.com/opensrc/apache/org/apache/commons/collections/functors/index.html Let me know if this is not the right approach to contributing!! I'm looking to get involved and want to do it right! cheers, ./paul -------------------------------------------- 1) MapIndexingTransformer proposed package: org.apache.commons.collections.functors (?) link: http://fe4.com/opensrc/apache/org/apache/commons/collections/functors/MapIndexingTransformer.java.html http://fe4.com/opensrc/apache/org/apache/commons/collections/functors/TestMapIndexingTransformer.java.html Transforms a Collection of Maps into a Map using a value of each Map to key that Map in the output. In pseudocode: indexValueToMapMap = Map for each record in input Collection get value from record at indexKey indexValueToMapMap[ index ] = record Thus the input: Collection [ Map[ "ID"=1, "NAME"="Paul" ], Map[ "ID"=2, "NAME"="Kim" ] ] is indexed on "ID" into Map [ 1 = Map[ "ID"=1, "NAME"="Paul" ], 2 = Map[ "ID"=2, "NAME"="Kim" ] ] -------------------------------------------- 2) MapPartitioningTransformer proposed package: org.apache.commons.collections.functors (?) link: http://fe4.com/opensrc/apache/org/apache/commons/collections/functors/MapPartitioningTransformer.java.html http://fe4.com/opensrc/apache/org/apache/commons/collections/functors/TestMapPartitioningTransformer.java.html Transform a Collection of Maps by grouping together those Maps that share a common value for some key. In other words, the input to this Transformer is a Collection of Maps as you might see coming from a database, and for each of the records, they may share some common value at a given key. "Partitioning on that value" will create collections for each unique value of that key in the input collection. In pseudocode: partitionNameToCollection = Map for each record of inputCollection get value as partitionName from record at partitionKey with partitionNameToCollection add record at partitionName return partitionNameToCollection Thus the input: Collection[ Map[ "ID"=1, "GROUP"="New York City", "NAME"="Paul" ] Map[ "ID"=2, "GROUP"="New York City", "NAME"="Kim" ] Map[ "ID"=3, "GROUP"="Atlanta", "NAME"="Marcia" ] Map[ "ID"=4, "GROUP"="Atlanta", "NAME"="Will" ] ] is partitioned on "GROUP" into: Map[ "group1" = Collection[ Map[ "ID"=1, "GROUP"="New York City", "NAME"="Paul" ] Map[ "ID"=2, "GROUP"="New York City", "NAME"="Kim" ] ] "group2" = Collection[ Map[ "ID"=3, "GROUP"="Atlanta", "NAME"="Marcia" ] Map[ "ID"=4, "GROUP"="Atlanta", "NAME"="Will" ] ] ] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]