[jira] [Updated] (COLLECTIONS-244) Proposal to support generic multi-key maps with keys of different types

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] [Updated] (COLLECTIONS-244) Proposal to support generic multi-key maps with keys of different types

ASF GitHub Bot (Jira)

     [ https://issues.apache.org/jira/browse/COLLECTIONS-244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Thomas Neidhart updated COLLECTIONS-244:

    Fix Version/s:     (was: 4.0)

> Proposal to support generic multi-key maps with keys of different types
> -----------------------------------------------------------------------
>                 Key: COLLECTIONS-244
>                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-244
>             Project: Commons Collections
>          Issue Type: Improvement
>          Components: Map
>            Reporter: Michael Heuer
>            Priority: Minor
>             Fix For: 4.x
>         Attachments: multi-map.tar.gz
> MultiKeyMap as designed can only accept keys of the same type, if made to support generics, i.e.
> MultiKeyMap<MultiKey<String>,Integer> map = ...;
> map.put("foo", "bar", 10);
> // not possible
> //MultiKeyMap<MultiKey<String,Integer>,Double> map = ...;
> Attached is a proposal that may support multi-key maps with keys of different types.  I do not believe varying numbers of typed keys can be supported in a single interface, thus this proposal includes
> BinaryKey<K1,K2>
> BinaryKeyMap<K1,K2,V> extends Map<BinaryKey<K1,K2>,V>
> TertiaryKey<K1,K2,K3>
> TertiaryKeyMap<K1,K2,K3,V> extends Map<TertiaryKey<K1,K2,K3>,V>
> QuaternaryKey<K1,K2,K3,K4>
> QuaternaryKeyMap<K1,K2,K3,K4,V> extends Map<QuaternaryKey<K1,K2,K3,K4>,V>
> To prevent unnecessary object creation, I also propose to support MapIterator-style iterators:
> BinaryKeyMapIterator<K1,K2,V> extends Iterator<V>
> TertiaryKeyMapIterator<K1,K2,K3,V> extends Iterator<V>
> QuaternaryKeyMapIterator<K1,K2,K3,K4,V> extends Iterator<V>
> Current multi-map MapIterator support is implemented as Iterator<K1> but I find that Iterator<V> makes more sense here.  It is not possible to support MapIterator<K,V> without object creation, e.g. MapIterator<BinaryKey<K1,K2>,V> must create BinaryKey objects for each call to next().

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira