I have two classes, ClassA
and ClassB
, as well as a \"many to many\" AssociationClass
. I want a structure that holds the associations
Here's my implementation based on guava Multimap:
public class ImmutableBiMultimap<K, V> {
private final ImmutableSetMultimap<K, V> kToV;
private final ImmutableSetMultimap<V, K> vToK;
public ImmutableBiMultimap (SetMultimap<K, V> keyToValueMap) {
kToV = ImmutableSetMultimap.copyOf(keyToValueMap);
SetMultimap<V, K> valueToKeyMap = HashMultimap.create();
for (Entry<K, V> entry : kToV.entries()) {
valueToKeyMap.put(entry.getValue(), entry.getKey());
}
vToK = ImmutableSetMultimap.copyOf(valueToKeyMap);
}
public ImmutableSet<V> getValuesForKey(K key) {
return kToV.get(key);
}
public ImmutableSet<K> getKeysForValue(V value) {
return vToK.get(value);
}
}