Как указано в комментарии, достаточно использовать мапу, в которой для каждого ключа будет храниться коллекция значений (список List
или множество Set
):
Map<K, List<V>> mapOfLists = new HashMap<>();
Map<K, Set<V>> mapOfSets = new LinkedHashMap<>();
Для добавления в такую коллекцию можно использовать метод Map::computeIfAbsent
, в котором при необходимости будет создана новая коллекция значений для отсутствующего ключа, в которую сразу можно будет добавить значение:
public static addValue(Key key, Value value) {
mapOfLists.computeIfAbsent(key, (k) -> new ArrayList<>()).add(value);
mapOfSets.computeIfAbsent(key, (k) -> new HashSet<>()).add(value);
}