2013-12-05 3 views
3

Как мы сейчас, существует концепция BiMap и multiMap, но есть ли multiBiMap? так что я имею в виду под этим. В multiMap у вас есть отношения «один ко многим» между K и V, один ключ может быть связан с несколькими значениями, отсюда и имя. На карте bi у вас есть пара K, V, которая является двунаправленной, вы также можете получить отношения V, K. Как и две регулярные карты, но синхронизированы. Мне нужна карта с двумя направлениями, в которой вы комбинируете эти две концепции.У нас есть MultiBiMap?

+0

, если вам не нужно, чтобы сохранить реальные пары, вы можете получить тот же эффект (или реализовать свой собственный), используя два multimaps (один идти в каждую сторону) – Thayne

+0

хорошо этот вопрос я хотел что-то простое, как это : multiBiMap где, если у вас есть ключ, вы получаете все значения, связанные с этим ключом, и если у вас есть значение, вы можете получить ключ. Но, как вы сказали, его можно будет реализовать. Я просто не хотел изобретать велосипед, если он уже существует. –

+0

Являются ли значения гарантированными уникальными? – Thayne

ответ

12
import java.util.Set; 

import com.google.common.collect.HashMultimap; 
import com.google.common.collect.SetMultimap; 

public class ManyToMany<K, V> { 
    private final SetMultimap<K, V> keysToValues = HashMultimap.create(); 

    private final SetMultimap<V, K> valuesToKeys = HashMultimap.create(); 

    public Set<V> getValues(K key) { 
     return keysToValues.get(key); 
    } 

    public Set<K> getKeys(V value) { 
     return valuesToKeys.get(value); 
    } 

    public boolean put(K key, V value) { 
     return keysToValues.put(key, value) && valuesToKeys.put(value, key); 
    } 

    public boolean putAll(K key, Iterable<? extends V> values) { 
     boolean changed = false; 
     for (V value : values) { 
      changed = put(key, value) || changed; 
     } 
     return changed; 
    } 
} 
+0

Я написал что-то подобное немного, но я не люблю тот факт, что у меня было два списка, но это тоже должно работать. –

+0

Я просто не думаю, что концептуально можно получить двунаправленные поисковые запросы, не поддерживая два мультиплекса. – gdejohn

Смежные вопросы