logo

Јава 8 Мултимап

Јава пружа разне корисне уграђене библиотеке колекција. Али понекад су нам биле потребне посебне врсте колекција које нису уграђене у Јавину стандардну библиотеку. Једна од ове колекције је Мултимап . У овом одељку ћемо научити шта је мултимап и како имплементирати мултимап у Јави, анд тхе Мултимап интерфејс библиотеке Гуава.

Јава Мултимап

у Јави, Мапа је структура података која нам омогућава да мапирамо кључ и вредност. С друге стране, мултимап је нови тип колекције који се налази у библиотеци Гуава која омогућава мапирање једног кључа у више вредности (као што су релације један-према-више у ДБМС-у). Али имајте на уму да ЈДК не дозвољава вишемапирање.

Јава 8 Мултимап

Алтернативно решење за имплементацију вишемапа у Јави коришћењем Гоогле-ове библиотеке Гуава и библиотека Апацхе Цоммонс Цоллецтионс. Оба обезбеђују имплементацију Мултимап интерфејса. Може да ускладишти више од једне вредности уз један кључ. И кључеви и вредности ускладиштени у колекцији и који се сматрају алтернативом за Мапа или Мапа (стандардни оквир за збирке ЈДК).

јава доубле то стринг

Али коришћење Мултимап-а Гоогле-ове библиотеке Гуава није много од помоћи за нас. Уместо тога, имплементираћемо сопствену класу Мултимап у Јави која се такође може прилагодити у складу са тим. Лако је написати класу Мултимап у Јави.

Следећи Јава програм описује имплементацију класе Мултимап у Јави користећи Мап и колекцију.

Јава Мултимап имплементација

МултимапЕкампле.јава

мискл није једнак
 import java.util.*; class MultiMap { //creating a map of key and value (collection) private Map<k, collection> map = new HashMap(); //add the specified value with the specified key in this multimap public void put(K key, V value) { if (map.get(key) == null) { map.put(key, new ArrayList()); } map.get(key).add(value); } //associate the specified key with the given value if not already associated with a value public void putIfAbsent(K key, V value) { if (map.get(key) == null) { map.put(key, new ArrayList()); } // if the value is absent, insert it if (!map.get(key).contains(value)) { map.get(key).add(value); } } //the method returns the Collection of values to which the specified key is mapped, or null if this multimap contains no mapping for the key public Collection get(Object key) { return map.get(key); } //the method returns a set view of the keys contained in this multimap public Set keySet() { return map.keySet(); } //the method returns a set view of the mappings contained in this multimap public Set<map.entry<k, collection>&gt; entrySet() { return map.entrySet(); } //the method returns a Collection view of Collection of the values present in this multimap public Collection<collection> values() { return map.values(); } //Returns true if this multimap contains a mapping for the specified key. public boolean containsKey(Object key) { return map.containsKey(key); } //Removes the mapping for the specified key from this multimap if present and returns the Collection of previous values associated with the key, or null if there was no mapping for key public Collection remove(Object key) { return map.remove(key); } //Returns the total number of key-value mappings in this multimap. public int size() { int size = 0; for (Collection value: map.values()) { size += value.size(); } return size; } //Returns true if this multimap contains no key-value mappings. public boolean isEmpty() { return map.isEmpty(); } //Removes all the mappings from this multimap. public void clear() { map.clear(); } //Removes the entry for the specified key only if it is currently mapped to the specified value and returns true if removed public boolean remove(K key, V value) { if (map.get(key) != null) // key exists return map.get(key).remove(value); return false; } //Replaces the entry for the specified key only if currently mapped to the specified value and return true if replaced public boolean replace(K key, V oldValue, V newValue) { if (map.get(key) != null) { if (map.get(key).remove(oldValue)) { return map.get(key).add(newValue); } } return false; } } //main class public class MultimapExample { //main method public static void main(String args[]) { //Creating a multimap of type String MultiMap multimap = new MultiMap(); //adding values to the multimap multimap.put(&apos;a&apos;, &apos;Andrew&apos;); multimap.put(&apos;b&apos;, &apos;Albert&apos;); multimap.put(&apos;b&apos;, &apos;Tom&apos;); multimap.put(&apos;d&apos;, &apos;Sam&apos;); multimap.put(&apos;d&apos;, &apos;Reo&apos;); multimap.put(&apos;g&apos;, &apos;Jack&apos;); multimap.put(&apos;g&apos;, &apos;David&apos;); System.out.println(&apos;----- Printing Multimap using keySet -----
&apos;); //loop iterate over multimap for (String lastName: multimap.keySet()) { //printing key and values System.out.println(lastName + &apos;: &apos; + multimap.get(lastName)); } } } </collection></map.entry<k,></k,>

Излаз:

 ----- Printing Multimap using keySet ----- a: [Andrew] b: [Albert, Tom] d: [Sam, Reo] g: [Jack, David] 

Коришћење Гоогле-ове библиотеке Гуава

Мултимап интерфејс је дефинисан у цом.гоогле.цоммон.цоллецт пакет библиотеке Гуава. Он имплементира многе класе назване на следећи начин:

АрраиЛистМултимап, ФорвардингЛистМултимап, ФорвардингМултимап, ФорвардингСетМултимап, ФорвардингСортедСетМултимап, ХасхМултимап, ИммутаблеЛистМултимап, ИммутаблеМултимап, ИммутаблеСетМултимап, ЛинкедХасхМултимап, ЛинкедХасхМултимапМултимап

Синтакса:

 @GwtCompatible public interface Multimap 

Колекција која мапира кључеве у вредности (исто као у мапи), али сваки кључ може бити повезан са више вредности. Можемо да визуелизујемо садржај вишемапе било као мапу од кључева до непразних колекција вредности. На пример:

парсеинт јава
  • Кс → 1, 2
  • И → 3

или

  • Кс → 1
  • Кс → 2
  • И → 3

Јава Мултимап Интерфаце Метходс

Метод Опис
асМап() Враћа приказ ове вишемапе као мапе из сваког различитог кључа у непразну колекцију придружених вредности тог кључа.
јасно() Уклања све парове кључ/вредност из мултимапе, остављајући га празним.
цонтаинсЕнтри(кључ објекта, вредност објекта) Враћа тачно ако ова вишемапа садржи најмање један пар кључ-вредност са кључем и вредношћу.
цонтаинсКеи (кључ објекта) Враћа тачно ако ова мултимапа садржи бар један пар кључ-вредност са кључем.
цонтаинсВалуе (вредност објекта) Враћа тачно ако ова вишемапа садржи најмање један пар кључ/вредност са вредношћу.
уноси() Враћа колекцију приказа свих парова кључ/вредност садржаних у овој мултимапи, као Мап.Ентри инстанце.
једнако (Објекат објекат) Он пореди наведени објекат са овом мултимапом ради једнакости.
форЕацх (акција БиЦонсумер) Он изводи дату акцију за све парове кључ/вредност садржане у овој мултимапи.
гет (К кључ) Враћа колекцију приказа вредности повезаних са кључем у овој мултимапи ако постоји.
хасхЦоде() Враћа хеш код за ову вишемапу.
Празно() Враћа тачно ако ова мултимапа не садржи парове кључ/вредност.
кључеви() Враћа колекцију погледа која садржи кључ из сваког пара кључ/вредност у овој мултимапи, без скупљања дупликата.
кеиСет() Враћа колекцију приказа свих различитих кључева садржаних у овој мултимапи.
пут (К кључ, В вредност) Чува пар кључ/вредност у овој мултимапу.
путАлл(К кључ, Итерабле вредности) Он складишти пар кључ-вредност у овој мултимапу за сваку од вредности, све користећи исти кључ, кључ.
путАлл (више мапа са више мапа) Он чува све парове кључ/вредност мултимапа у овој мултимапу, редоследом који враћа мултимап.ентриес().
уклони (кључ објекта, вредност објекта) Уклања један пар кључ-вредност са кључем и вредношћу из ове вишемапе, ако постоји.
уклони све (кључ објекта) Уклања све вредности повезане са кључем.
реплацеВалуес (К кључ, Итерабле вредности) Чува колекцију вредности са истим кључем, замењујући све постојеће вредности за тај кључ.
величина() Враћа број парова кључ/вредност у овој мултимапи.
вредности() Враћа колекцију погледа која садржи вредност из сваког пара кључ/вредност садржаног у овој мултимапи, без сажимања дупликата (дакле валуес().сизе() == сизе()).