logo

Java 8 マルチマップ

Java には、さまざまな便利な組み込みコレクション ライブラリが用意されています。ただし、Java の標準ライブラリに組み込まれていない特殊なタイプのコレクションが必要になる場合があります。このコレクションのひとつが、 マルチマップ 。このセクションでは、マルチマップとは何かを学び、 Javaでマルチマップを実装する方法、 そしてその マルチマップインターフェース グアバ図書館の。

Java マルチマップ

Javaでは、 地図 は、キーを値にマッピングできるデータ構造です。一方、multimap は、Guava ライブラリにある新しいコレクション タイプで、単一のキーを複数の値にマッピングすることができます (DBMS における 1 対多のリレーションのように)。ただし、JDK ではマルチマッピングが許可されていないことに注意してください。

Java 8 マルチマップ

Google の Guava ライブラリと Apache Commons Collections ライブラリを使用して Java でマルチマップを実装する代替ソリューション。どちらも Multimap インターフェイスの実装を提供します。単一のキーに対して複数の値を保存できます。キーと値の両方がコレクションに保存され、代替として考慮されます。 地図 または 地図 (標準の JDK コレクション フレームワーク)。

Cのブール値

しかし、Google の Guava ライブラリの Multimap を使用しても、あまり役に立ちません。代わりに、それに応じてカスタマイズすることもできる独自の Multimap クラスを Java で実装します。 Java で Multimap クラスを作成するのは簡単です。

次の Java プログラムは、Map とコレクションを使用した Java での Multimap クラスの実装を示しています。

Java マルチマップの実装

マルチマップ例.java

二分木と二分探索木
 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] 

Google の Guava ライブラリを使用する

マルチマップ インターフェースはで定義されています com.google.common.collect Guava ライブラリのパッケージ。次のような名前の多くのクラスを実装します。

ArrayListMultimap、ForwardingListMultimap、ForwardingMultimap、ForwardingSetMultimap、ForwardingSortedSetMultimap、HashMultimap、ImmutableListMultimap、ImmutableMultimap、ImmutableSetMultimap、LinkedHashMultimap、LinkedListMultimap、TreeMultimap。

構文:

 @GwtCompatible public interface Multimap 

キーを値にマップするコレクション (Map と同じ) ですが、各キーは複数の値に関連付けられる場合があります。マルチマップの内容は、キーから空ではない値のコレクションへのマップとして視覚化できます。例えば:

  • ×→1、2
  • Y→3

または

ローカル日時Java
  • X→1
  • ×→2
  • Y→3

Java マルチマップ インターフェイス メソッド

方法 説明
asMap() このマルチマップのビューを、各個別キーからそのキーに関連付けられた値の空でないコレクションへのマップとして返​​します。
クリア() マルチマップからすべてのキーと値のペアが削除され、空のままになります。
containsEntry(オブジェクトキー, オブジェクト値) このマルチマップにキーと値のキーと値のペアが少なくとも 1 つ含まれている場合、true を返します。
containsKey(オブジェクトキー) このマルチマップにキーとのキーと値のペアが少なくとも 1 つ含まれている場合、true を返します。
containsValue(オブジェクト値) このマルチマップに値を持つキーと値のペアが少なくとも 1 つ含まれている場合は true を返します。
エントリ() このマルチマップに含まれるすべてのキーと値のペアのビュー コレクションを Map.Entry インスタンスとして返します。
等しい(オブジェクトオブジェクト) 指定されたオブジェクトとこのマルチマップが等しいかどうかを比較します。
forEach(BiConsumer アクション) このマルチマップに含まれるすべてのキーと値のペアに対して指定されたアクションを実行します。
get(Kキー) このマルチマップ内のキーに関連付けられた値のビュー コレクションがあれば、それを返します。
ハッシュコード() このマルチマップのハッシュ コードを返します。
isEmpty() このマルチマップにキーと値のペアが含まれていない場合は true を返します。
キー() このマルチマップ内の各キーと値のペアのキーを含むビュー コレクションを、重複を折りたたむことなく返します。
キーセット() このマルチマップに含まれるすべての個別のキーのビュー コレクションを返します。
put(Kキー、V値) このマルチマップにキーと値のペアを格納します。
putAll(K キー、反復可能な値) すべて同じキー (key) を使用して、値ごとにキーと値のペアをこのマルチマップに保存します。
putAll(マルチマップ マルチマップ) マルチマップのすべてのキーと値のペアを、multimap.entries() によって返された順序でこのマルチマップに格納します。
削除(オブジェクトキー, オブジェクト値) キーと値を持つ単一のキーと値のペアがこのマルチマップから削除されます (存在する場合)。
すべて削除(オブジェクトキー) キーに関連付けられたすべての値が削除されます。
replaceValues(K キー、反復可能な値) 同じキーを持つ値のコレクションを保存し、そのキーの既存の値を置き換えます。
サイズ() このマルチマップ内のキーと値のペアの数を返します。
値() このマルチマップに含まれる各キーと値のペアの値を含むビュー コレクションを、重複を折りたたむことなく返します (つまり、values().size() == size())。