1. Общ преглед
В този урок ще покажем как да използваме интерфейса BiMap на Google Guava и многобройните му внедрения.
А BiMap (или "двупосочен карта") е специален вид карта, която поддържа обратна гледане на картата като същевременно се гарантира, че не дублиращи се стойности са налични и стойност винаги могат да се използват безопасно, за да получите ключ гърба.
Основната реализация на BiMap е HashBiMap, където вътрешно използва две карти , едната за картографиране на ключ към стойност, а другата за картографиране на стойността към ключ.
2. BiMap на Google Guava
Нека да разгледаме как да използваме класа BiMap .
Ще започнем с добавяне на зависимостта на библиотеката Google Guava в pom.xml :
com.google.guava guava 21.0
Най-новата версия на зависимостта може да бъде проверена тук.
3. Създаване на BiMap
Можете да създадете екземпляр на BiMap по няколко начина, както следва:
- Ако ще се занимавате с персонализиран Java обект, използвайте метода create от класа HashBiMap:
BiMap capitalCountryBiMap = HashBiMap.create();
- Ако вече имаме съществуваща карта, можете да създадете екземпляр на BiMap, като използвате претоварена версия на метода create от клас HashBiMap :
Map capitalCountryBiMap = new HashMap(); //... HashBiMap.create(capitalCountryBiMap);
- Ако ще се занимавате с ключ от тип Enum, използвайте метода create от класа EnumHashBiMap :
BiMap operationStringBiMap = EnumHashBiMap.create(MyEnum.class);
- Ако възнамерявате да създадете неизменяема карта, използвайте класа ImmutableBiMap (който следва модел на конструктор):
BiMap capitalCountryBiMap = new ImmutableBiMap.Builder() .put("New Delhi", "India") .build();
4. Използване на BiMap
Нека започнем с прост пример, показващ използването на BiMap, където можем да получим ключ въз основа на стойност и стойност, основана на ключ:
@Test public void givenBiMap_whenQueryByValue_shouldReturnKey() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("New Delhi", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); String keyFromBiMap = capitalCountryBiMap.inverse().get("Russia"); String valueFromBiMap = capitalCountryBiMap.get("Washington, D.C."); assertEquals("Moscow", keyFromBiMap); assertEquals("USA", valueFromBiMap); }
Забележка: обратният метод по-горе връща обратния изглед на BiMap , който преобразува всяка от стойностите на BiMap в свързаните с него ключове.
BiMap изхвърля IllegalArgumentException, когато се опитаме да съхраним дублирана стойност два пъти.
Нека да видим пример за същото:
@Test(expected = IllegalArgumentException.class) public void givenBiMap_whenSameValueIsPresent_shouldThrowException() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("Mumbai", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); capitalCountryBiMap.put("New Delhi", "India"); }
Ако искаме да заменим стойността, която вече е в BiMap , можем да използваме метода forcePut :
@Test public void givenSameValueIsPresent_whenForcePut_completesSuccessfully() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("Mumbai", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); capitalCountryBiMap.forcePut("New Delhi", "India"); assertEquals("USA", capitalCountryBiMap.get("Washington, D.C.")); assertEquals("Washington, D.C.", capitalCountryBiMap.inverse().get("USA")); }
5. Заключение
В този кратък урок илюстрирахме примери за използване на BiMap в библиотеката на Гуава. Използва се предимно за получаване на ключ въз основа на стойността от картата.
Изпълнението на тези примери може да бъде намерено в проекта GitHub - това е проект, базиран на Maven, така че трябва да е лесно да се импортира и да се изпълнява както е.