logo

Java 8 Multimap

Java tarjoaa useita hyödyllisiä sisäänrakennettuja kokoelmakirjastoja. Mutta joskus vaadimme erikoiskokoelmia, joita ei ole sisäänrakennettu Javan standardikirjastoon. Yksi tästä kokoelmasta on Multimap . Tässä osiossa opimme, mikä on multimap ja kuinka ottaa multimap käyttöön Javassa, ja Multimap käyttöliittymä Guava-kirjastosta.

Java Multimap

Javalla, Kartta on tietorakenne, jonka avulla voimme kartoittaa avaimen arvoon. Toisaalta multimap on uusi Guava-kirjastosta löytyvä kokoelmatyyppi, joka mahdollistaa yhden avaimen yhdistämisen useisiin arvoihin (kuten yksi-moneen-relaatiot DBMS:ssä). Huomaa kuitenkin, että JDK ei salli monikartoitusta.

Java 8 Multimap

Vaihtoehtoinen ratkaisu multimapin toteuttamiseen Javassa käyttämällä Googlen Guava-kirjastoa ja Apache Commons Collections -kirjastoja. Molemmat tarjoavat Multimap-käyttöliittymän toteutuksen. Se voi tallentaa useamman kuin yhden arvon yhtä avainta vastaan. Sekä kokoelmaan tallennetut ja vaihtoehtona pidetyt avaimet ja arvot Kartta tai Kartta (tavallinen JDK Collections Framework).

mysql-päivitykseen liittyminen

Mutta Googlen Guava-kirjaston Multimap-sovelluksesta ei ole paljon hyötyä meille. Sen sijaan toteutamme Java-kielellä oman Multimap-luokan, jota voidaan myös mukauttaa vastaavasti. Multimap-luokan kirjoittaminen Javalla on helppoa.

Seuraava Java-ohjelma kuvaa Multimap-luokan toteutusta Javassa Map and collection -sovelluksella.

Java Multimap -toteutus

MultimapExample.java

estää youtube-mainokset Android
 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,>

Lähtö:

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

Googlen Guava-kirjaston käyttäminen

Multimap käyttöliittymä on määritelty kohdassa com.google.common.collect Guava-kirjaston paketti. Se toteuttaa monia luokkia, jotka on nimetty seuraavasti:

ArrayListMultimap, ForwardingListMultimap, ForwardingMultimap, ForwardingSetMultimap, ForwardingSortedSetMultimap, HashMultimap, ImmutableListMultimap, ImmutableMultimap, ImmutableSetMultimap, LinkedHashMultimap, TreistMultimap, TreisteMultimap.

sdlc-elinkaari

Syntaksi:

 @GwtCompatible public interface Multimap 

Kokoelma, joka yhdistää avaimet arvoihin (sama kuin Mapissa), mutta jokaiseen avaimeen voi liittyä useita arvoja. Voimme visualisoida monikartan sisällön joko karttana avaimista ei-tyhjiin arvokokoelmiin. Esimerkiksi:

  • X → 1, 2
  • Y → 3

tai

  • X → 1
  • X → 2
  • Y → 3

Java Multimap Interface Methods

Menetelmä Kuvaus
asMap() Se palauttaa tämän monikartan näkymän Karttana jokaisesta erillisestä avaimesta ei-tyhjään kokoelmaan kyseiseen avaimeen liittyviä arvoja.
asia selvä() Se poistaa kaikki avainarvo-parit monikartasta jättäen sen tyhjäksi.
sisältääEntry(objektiavain, objektin arvo) Se palauttaa tosi, jos tämä monikartta sisältää vähintään yhden avainarvoparin avaimen ja arvon kanssa.
sisältääKey(Objektiavain) Se palauttaa tosi, jos tämä monikartta sisältää vähintään yhden avainarvoparin avaimen kanssa.
sisältääValue(objektin arvo) Se palauttaa arvon tosi, jos tämä monikartta sisältää vähintään yhden avainarvoparin arvon kanssa.
merkinnät () Se palauttaa näkymäkokoelman kaikista tämän monikartan sisältämistä avainarvopareista Map.Entry-esiintyminä.
yhtä kuin (objektiobjekti) Se vertaa määritettyä objektia tähän monikarttaan tasa-arvon saavuttamiseksi.
forEach (kaksikuluttajan toiminta) Se suorittaa annetun toiminnon kaikille tämän monikartan sisältämille avain-arvo-pareille.
get (K-näppäin) Se palauttaa näkymäkokoelman tämän monikartan avaimeen liittyvistä arvoista, jos sellaisia ​​on.
hash koodin() Se palauttaa tämän monikartan hash-koodin.
on tyhjä() Se palauttaa arvon tosi, jos tämä monikartta ei sisällä avain-arvo-pareja.
avaimet () Se palauttaa näkymäkokoelman, joka sisältää avaimen kustakin avain-arvoparista tässä monikartassa ilman, että kaksoiskappaleita kutistetaan.
keySet() Se palauttaa näkymäkokoelman kaikista tämän monikartan sisältämistä erillisistä avaimista.
put(K-avain, V-arvo) Tallentaa avain-arvo-parin tähän monikarttaan.
putAll (K-avain, iteroitavat arvot) Se tallentaa avain-arvo-parin tähän monikarttaan jokaiselle arvolle, jotka kaikki käyttävät samaa avainta, avainta.
laittaaAll (Multimap multimap) Se tallentaa kaikki multimap-avainarvoparit tähän monikarttaan siinä järjestyksessä, jonka multimap.entries() palauttaa.
poista (objektiavain, objektin arvo) Se poistaa yksittäisen avainarvoparin avaimen ja arvon kanssa tästä monikartasta, jos sellainen on olemassa.
poista kaikki (objektiavain) Se poistaa kaikki avaimeen liittyvät arvot.
korvaavat arvot (K-avain, iteroitavat arvot) Se tallentaa kokoelman arvoja samalla avaimella ja korvaa kaikki kyseisen avaimen olemassa olevat arvot.
koko() Se palauttaa avain-arvo-parien määrän tässä monikartassa.
arvot() Se palauttaa näkymäkokoelman, joka sisältää arvon kustakin tämän monikartan sisältämästä avain-arvo-parista ilman, että kaksoiskappaleita kutistetaan (siis arvot().size() == koko()).