commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephen Colebourne <scolebou...@btopenworld.com>
Subject Re: [collections] proposed new features - MapIndexing, MapPartitioning
Date Sun, 16 Apr 2006 19:33:18 GMT
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


Mime
View raw message