Вы можете использовать BiMap из Коллекции Eclipse (ранее GS Collections).
BiMap
- карта, которая позволяет пользователям выполнять поиск в обоих направлениях. И ключи, и значения в BiMap являются уникальными.
Основная реализация - HashBiMap
.
inverse()
BiMap.inverse()
возвращает представление, в котором позиция типа ключа и типа значения меняются местами.
MutableBiMap<Integer, String> biMap =
HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3");
MutableBiMap<String, Integer> inverse = biMap.inverse();
Assert.assertEquals("1", biMap.get(1));
Assert.assertEquals(1, inverse.get("1"));
Assert.assertTrue(inverse.containsKey("3"));
Assert.assertEquals(2, inverse.put("2", 4));
put()
MutableBiMap.put()
ведет себя как Map.put()
на обычной карте, за исключением того, что выбрасывает при добавлении дублирующего значения.
MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.put(1, "1"); // behaves like a regular put()
biMap.put(1, "1"); // no effect
biMap.put(2, "1"); // throws IllegalArgumentException
forcePut()
Это ведет себя как MutableBiMap.put()
, но оно молча удаляет запись карты с тем же значением, прежде чем поместить пару ключ-значение в карту.
MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.forcePut(1, "1"); // behaves like a regular put()
biMap.forcePut(1, "1"); // no effect
biMap.put(1, "2"); // replaces the [1,"1"] pair with [1, "2"]
biMap.forcePut(2, "2"); // removes the [1, "2"] pair before putting
Assert.assertFalse(biMap.containsKey(1));
Assert.assertEquals(HashBiMap.newWithKeysValues(2, "2"), biMap);
Примечание: Я являюсь коммиттером для Eclipse Collections.