一嫂用、簡介
Guava
提供了一個(gè)非常強(qiáng)大的集合處理工具 - Maps
.它提供了我們工作中許多常見的Map
處理場(chǎng)景.如Map
的diff
功能给梅、常見的一堆對(duì)象唯一索引操作糯钙、轉(zhuǎn)換普通的復(fù)雜Map<String ,List<Object>
為MultiMap<String ,Object>
,降低此類場(chǎng)景處理的復(fù)雜度等等.
二罗心、常用方法
1拄踪、唯一索引方法 - uniqueIndex()
當(dāng)我們平時(shí)處理一堆對(duì)象,并且將對(duì)象通過唯一的屬性封裝成Map
的時(shí)候吏砂,就可以使用Maps.uniqueIndex(Iterable<V> values, Function<? super V, K> keyFunction)
方法.它可以返回將keyFunction
中的處理結(jié)果作為每個(gè)對(duì)象的key
,對(duì)應(yīng)對(duì)象作為value
的不可以變Map - ImmutableMap
.
實(shí)驗(yàn)代碼:
//測(cè)試唯一索引方法 Maps - uniqueIndex
ImmutableMap<Integer, String> immutableMap = Maps.uniqueIndex(Lists.newArrayList("a1000000", "b20000000"), new Function<String, Integer>() {
@Override
public Integer apply(String input) {
return input.length();
}
});
//測(cè)試索引方法 Multimaps - index
System.out.println("==================測(cè)試Maps-niqueIndex()方法===================" + immutableMap);
Multimap<Integer, String> multimap = Multimaps.index(Lists.newArrayList("a1000000", "b20000000", "a1000000"), new Function<String, Integer>() {
@Override
public Integer apply(String input) {
return input.length();
}
});
實(shí)驗(yàn)結(jié)果:
==================測(cè)試Maps-niqueIndex()方法==================={8=a1000000, 9=b20000000}
==================測(cè)試Multimaps-Index方法==================={8=[a1000000, a1000000], 9=[b20000000]}
值得注意的是:
Maps.uniqueIndex(()
中不能存在指定唯一索引相同的索引節(jié)點(diǎn)撵儿,否則會(huì)拋出非法異常IllegalArgumentException: Multiple entries with same key
.
2、diff方法 - difference()
Maps
還提供了一個(gè)非常實(shí)用的diff方法 - difference( Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right)
.
它會(huì)對(duì)兩個(gè)集合進(jìn)行比較,并返回一個(gè)MapDifference<K, V>
對(duì)象.此對(duì)象分別提供了可以獲取兩個(gè)map
diff后的維恩圖中各個(gè)部分的值.
實(shí)驗(yàn)代碼:
//測(cè)試diff
Map<String, String> map1 = Maps.newHashMap();
map1.put("a", "a1");
map1.put("b", "b1");
map1.put("c", "c1");
Map<String, String> map2 = Maps.newHashMap();
map2.put("a", "a1");
map2.put("b", "b2");
map2.put("d", "d2");
MapDifference<String, String> mapDifference = Maps.difference(map1, map2);
System.out.println("==================測(cè)試Maps-difference()方法===================" + mapDifference);
System.out.println("==================測(cè)試diff - entriesInCommon()方法===================" + mapDifference.entriesInCommon());
System.out.println("==================測(cè)試diff - entriesOnlyOnLeft()方法===================" + mapDifference.entriesOnlyOnLeft());
System.out.println("==================測(cè)試diff - entriesOnlyOnRight()方法===================" + mapDifference.entriesOnlyOnRight());
System.out.println("==================測(cè)試diff - entriesDiffering()方法===================" + mapDifference.entriesDiffering());
System.out.println("==================測(cè)試diff - areEqual()方法===================" + mapDifference.areEqual());
實(shí)驗(yàn)結(jié)果:
==================測(cè)試Maps-difference()方法===================not equal: only on left={c=c1}: only on right={d=d2}: value differences={b=(b1, b2)}
==================測(cè)試diff - entriesInCommon()方法==================={a=a1}
==================測(cè)試diff - entriesOnlyOnLeft()方法==================={c=c1}
==================測(cè)試diff - entriesOnlyOnRight()方法==================={d=d2}
==================測(cè)試diff - entriesDiffering()方法==================={b=(b1, b2)}
==================測(cè)試diff - areEqual()方法===================false
可以看出MapDifference
對(duì)象會(huì)將diff后的結(jié)果都記錄了下來:
a狐血、entriesInCommon()
返回兩個(gè)map中key和value都相同的記錄.
b淀歇、entriesOnlyOnLeft()
返回兩個(gè)map中left - map
獨(dú)有的記錄.
c、entriesOnlyOnRight()
返回兩個(gè)map中right map
獨(dú)有的記錄.
d匈织、entriesDiffering()
返回兩個(gè)map中key
相同value
不同的記錄.
e房匆、areEqual()
返回兩個(gè)map是否完全相同 true orElse false.
三、BiMap相關(guān)方法
Guava
將BiMap的公共方法劃分到Maps工具類中,因?yàn)樗麄冋J(rèn)為BiMap也是Map.
常見的實(shí)用方法如下:
1报亩、獲取線程安全的BiMap方法 - synchronizedBiMap()
Maps
工具類提供了支持返回一個(gè)線程安全的BiMap方法 - synchronizedBiMap(BiMap<K, V> bimap)
.
實(shí)驗(yàn)代碼如下:
//測(cè)試BiMap線程安全方法 - synchronizedBiMap
BiMap<String, Integer> synchronizedBiMap = Maps.synchronizedBiMap(biMap);
System.out.println("==================測(cè)試BiMap - synchronizedBiMap()方法===================" + synchronizedBiMap);
2浴鸿、獲取不可變的BiMap方法 - unmodifiableBiMap()
使用unmodifiableBiMap()
方法,可以獲得指定BiMap的不可變集.
實(shí)驗(yàn)代碼:
//測(cè)試BiMap不可變方法 - unmodifiableBiMap
BiMap<String, Integer> unmodifiableBiMap = Maps.unmodifiableBiMap(synchronizedBiMap);
System.out.println("==================測(cè)試BiMap - unmodifiableBiMap()方法===================" + unmodifiableBiMap);
......未完待續(xù)