日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Google Guava MultiMaps

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google Guava MultiMaps 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

番石榴

這是系列文章中的第一篇,我將嘗試解釋和探索Google很棒的Guava java庫 。

我在搜索Apache Commons Collections的通用版本時遇到了番石榴(Guava)–我需要一個Bimap并且厭倦了必須使用強制類型轉換來填充我的代碼–但是我發現要好得多。

它不僅含有更復雜(但有用)集合類型-的各種實現屈德寧 , 多集 , Bimaps -我將詳細討論,但也設施,以支持具有不可變的集合編程的功能更強大的樣式, 功能和謂語對象。 這完全改變了我編寫Java的方式,同時使我對Java有時笨拙的語法越來越沮喪,這是我打算在以后的文章中探討的。

無論如何,只要有了介紹,再加上好東西。 我要看的第一件事是Multimap,它可能是我最常使用的單個Guava功能。

多圖

那么,您多久需要一次如下所示的數據結構?

Map<String,List<MyClass>> myClassListMap test2= new HashMap<String,List<MyClass>>()

如果你像我一樣,相當頻繁。 而且您是否發現自己一遍又一遍地編寫相同的樣板代碼?

要將鍵/值對放入此映射,您需要首先檢查您的鍵是否已經存在列表,以及是否沒有創建該列表。 您最終將按照以下內容寫一些東西:

void putMyObject(String key, Object value) {List<Object> myClassList = myClassListMap.get(key);if(myClassList == null) {myClassList = new ArrayList<object>();myClassListMap.put(key,myClassList);}myClassList.add(value); }

有點麻煩,如果需要檢查值的方法,該方法存在,刪除值,甚至遍歷整個數據結構。 那可能是很多代碼。

永遠不要擔心番石榴在這里!

就像標準的Java集合一樣,Guava定義了幾個接口和匹配的實現。 通常,您要對接口進行編碼,而只在創建接口時才擔心實現。 在這種情況下,我們對Multimaps感興趣。

因此,使用多圖,我們可以將數據結構聲明替換為以下內容:

Multimap<String,Object> myMultimap = ArrayListMultimap.create();

這里有幾件事要注意。 泛型類型聲明應該看起來非常熟悉,這正是您聲明普通Map的方式。

您可能一直希望在等號的右側看到new ArrayListMultimap<String,Object>() 。 好吧,所有Guava集合實現都提供了create方法,該方法通常更簡潔,并且具有不必重復泛型類型信息的優點。

實際上,番石榴在標準Java集合中增加了類似的功能。 例如,如果檢查com.google.common.collect.Lists ,則會看到靜態的newArrayList()和newLinkedList()方法,因此即使使用標準Java集合,也可以利用這種簡潔性。 (我將在以后的文章中詳細介紹)。

因此,我們已經聲明并實例化了一個multimap,如何使用它們呢? 就像法線貼圖一樣簡單!

public class MutliMapTest {public static void main(String... args) {Multimap<String, String> myMultimap = ArrayListMultimap.create();// Adding some key/valuemyMultimap.put('Fruits', 'Bannana');myMultimap.put('Fruits', 'Apple');myMultimap.put('Fruits', 'Pear');myMultimap.put('Vegetables', 'Carrot');// Getting the sizeint size = myMultimap.size();System.out.println(size); // 4// Getting valuesCollection<string> fruits = myMultimap.get('Fruits');System.out.println(fruits); // [Bannana, Apple, Pear]Collection<string> vegetables = myMultimap.get('Vegetables');System.out.println(vegetables); // [Carrot]// Iterating over entire Mutlimapfor(String value : myMultimap.values()) {System.out.println(value);}// Removing a single valuemyMultimap.remove('Fruits','Pear');System.out.println(myMultimap.get('Fruits')); // [Bannana, Pear]// Remove all values for a keymyMultimap.removeAll('Fruits');System.out.println(myMultimap.get('Fruits')); // [] (Empty Collection!)} }

您可能想知道的一件事是,為什么get方法返回一個Collection而不是一個List ,這會有用得多。 確實會。 問題是有幾種不同的實現方式,一些使用Lists- ArrayListMultimap , LinkedListMultimap等-某些使用Sets- HashMultimap , TreeMultimap等。

要處理此問題(如果您需要直接使用列表中的列表或集合),需要定義幾個子接口。 ListMultimap , SetMultimap和SortedSetMultimap 。 這些都可以完成您期望的操作,它們返回集合的方法將返回approprite類型之一。

ListMutlimap<String,String> myMutlimap = ArrayListMultimap.create();List<string> myValues = myMutlimap.get('myKey'); // Returns a List, not a Collection.

這基本上就是他們的全部。 我建議您查看以下API: http : //docs.guava-libraries.googlecode.com/git-history/release09/javadoc/com/google/common/collect/Multimap.html ,在這里您可以找到各種實現,應該能夠找到適合您需求的產品。


參考: Multimaps – Tom's Programming Blog博客上的JCG合作伙伴 Tom Jefferys提供的Google Guava 。

翻譯自: https://www.javacodegeeks.com/2012/12/google-guava-multimaps.html

總結

以上是生活随笔為你收集整理的Google Guava MultiMaps的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。