commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephen Smith <st...@stephen-smith.co.uk>
Subject Re: [collections] proposed new features - MapIndexing, MapPartitioning
Date Mon, 17 Apr 2006 19:07:28 GMT
+1 for the idea of a SourceForge project dedicated to functors 
implementations - anything that reduces the number of chained If 
statements out there can only be a good thing. :)
--
Stephen Smith, MEng (Wales).
http://www.stephen-smith.co.uk/

Stephen Colebourne wrote:
> Hi Paul,
> Thanks for your proposal. I took a look, and it seems like an intriguing 
> idea.
> 
> However, they are really too specific for [collections] itself. The 
> functor package in [collections] has to try and stay focussed on just 
> the very basic functors, as there are literally thousands of possible 
> good implementations out there.
> 
> Maybe someone should startup a sourceforge fuctor implementations project!
> 
> Stephen
> 
> 
> Paul Feuer wrote:
>> 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: commons-dev-unsubscribe@jakarta.apache.org
>> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message