Vodič za Guava BiMap
1. Pregled
U ovom uputstvu pokazat ćemo kako koristiti Google Guava BiMap sučelje i njegove višestruke implementacije.
A BiMap (ili "dvosmjerna karta") posebna je vrsta karte koja održava inverzni prikaz karte, istovremeno osiguravajući da ne postoje duplicirane vrijednosti i da se vrijednost uvijek može sigurno koristiti za vraćanje ključa.
Osnovna provedba BiMap je HashBiMap gdje interno koristi dvoje Kartas, jedan za mapiranje ključa za vrijednost, a drugi za mapiranje vrijednosti za ključ.
2. Google Guava BiMap
Pogledajmo kako koristiti BiMap razred.
Počet ćemo dodavanjem ovisnosti o knjižnici Google Guava u pom.xml:
com.google.guava guava 21.0
Najnoviju verziju ovisnosti možete provjeriti ovdje.
3. Stvaranje BiMap-a
Možete stvoriti instancu BiMap na više načina kako slijedi:
- Ako ćete se baviti prilagođenim Java objektom, upotrijebite stvoriti metoda iz klase HashBiMap:
BiMap capitalCountryBiMap = HashBiMap.create ();
- Ako već imamo postojeću kartu, možete stvoriti instancu a BiMap pomoću preopterećene verzije stvoriti metoda iz razreda HashBiMap:
Mapa capitalCountryBiMap = novi HashMap (); // ... HashBiMap.create (capitalCountryBiMap);
- Ako ćete imati posla s ključem tipa Enum, koristiti stvoriti metoda iz razreda EnumHashBiMap:
BiMap operationStringBiMap = EnumHashBiMap.create (MyEnum.class);
- Ako namjeravate stvoriti nepromjenjivu kartu, upotrijebite ImmutableBiMap klasa (koja slijedi obrazac graditelja):
BiMap capitalCountryBiMap = new ImmutableBiMap.Builder () .put ("New Delhi", "India") .build ();
4. Korištenje BiMap-a
Počnimo s jednostavnim primjerom koji prikazuje upotrebu BiMap, gdje možemo dobiti ključ na temelju vrijednosti i vrijednost koja se temelji na ključu:
@Test javna praznina givenBiMap_whenQueryByValue_shouldReturnKey () {BiMap capitalCountryBiMap = HashBiMap.create (); capitalCountryBiMap.put ("New Delhi", "Indija"); capitalCountryBiMap.put ("Washington, D.C.", "USA"); capitalCountryBiMap.put ("Moskva", "Rusija"); String keyFromBiMap = capitalCountryBiMap.inverse (). Get ("Rusija"); String valueFromBiMap = capitalCountryBiMap.get ("Washington, D.C."); assertEquals ("Moskva", keyFromBiMap); assertEquals ("USA", valueFromBiMap); }
Napomena: inverzan gornja metoda vraća inverzni prikaz BiMap, koji preslikava svaku vrijednost BiMap-a na pripadajuće ključeve.
BiMap baca an IlegalArgumentException kada dva puta pokušamo pohraniti dvostruku vrijednost.
Pogledajmo primjer istog:
@Test (očekuje se = IllegalArgumentException.class) javna praznina givenBiMap_whenSameValueIsPresent_shouldThrowException () {BiMap capitalCountryBiMap = HashBiMap.create (); capitalCountryBiMap.put ("Mumbai", "Indija"); capitalCountryBiMap.put ("Washington, D.C.", "USA"); capitalCountryBiMap.put ("Moskva", "Rusija"); capitalCountryBiMap.put ("New Delhi", "Indija"); }
Ako želimo nadjačati vrijednost koja je već prisutna u BiMap, možemo iskoristiti forcePut metoda:
@Test javna praznina givenSameValueIsPresent_whenForcePut_completesSuccessfully () {BiMap capitalCountryBiMap = HashBiMap.create (); capitalCountryBiMap.put ("Mumbai", "Indija"); capitalCountryBiMap.put ("Washington, D.C.", "USA"); capitalCountryBiMap.put ("Moskva", "Rusija"); capitalCountryBiMap.forcePut ("New Delhi", "Indija"); assertEquals ("USA", capitalCountryBiMap.get ("Washington, D.C.")); assertEquals ("Washington, D.C.", capitalCountryBiMap.inverse (). get ("USA")); }
5. Zaključak
U ovom sažetom vodiču ilustrirali smo primjere korištenja BiMap u knjižnici Guava. Uglavnom se koristi za dobivanje ključa na temelju vrijednosti s karte.
Implementacija ovih primjera može se naći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.