跨地图的通用键控:Map <K,V> Map <T,K>和Map <T,V>

pbh*_*101 1 java generics collections maps

我有一个函数,它返回两个输入映射之间的单侧交叉值:

Map<Key, Value> mergeMaps(Map aKeys<CompositeKey, Key>, 
         Map <CompositeKey, Value> aValues) {

    Map<Key, Value> myResult = Maps.newHashMap();
    for (CompositeKey myKey : aKeys.keySet()) {
        if (aValues.containsKey(myKey)) {
            myResult.put( aKeys.get(myKey), aValues.get(myKey));
        }
    }
    return myResult;
}
Run Code Online (Sandbox Code Playgroud)

不是传递映射组合,即

T->K, K->V ===> T->V
Run Code Online (Sandbox Code Playgroud)

而是转变

T->(K,V) ===> K->V
Run Code Online (Sandbox Code Playgroud)

在Java中是否有一种方法可以使这个函数具有通用性,使其签名如下?

Map<K, V> mergeMaps(Map aKeys<T, K>, Map <T, V> aValues)
Run Code Online (Sandbox Code Playgroud)

Daf*_*aff 5

我认为这个签名应该做你想要的:

<T, K, V> Map<K, V> mergeMaps(Map<T, K> aKeys, Map<T, V> aValues)
Run Code Online (Sandbox Code Playgroud)