Есть ли у нас MultiBiMap?

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

1 ответ

Решение
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;
    }
}
Другие вопросы по тегам