Пътеводител за Guava BiMap

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, така че трябва да е лесно да се импортира и да се изпълнява както е.