You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Thomas Neidhart (JIRA)" <ji...@apache.org> on 2013/03/17 20:43:14 UTC
[jira] [Updated] (COLLECTIONS-244) Proposal to support generic
multi-key maps with keys of different types
[ 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)
4.x
> 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