Guava 集合工具类 Multimaps
提供作用于或生成 Multimap 的静态方法。
一、接口声明
以下是 com.google.common.collect.Multimaps 接口的声明:
@GwtCompatible(emulated=true) public final class Multimaps extends Object
二、接口方法
官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/collect/Multimaps.html
| 修饰符和类型 | 方法描述 |
|---|---|
static <K,V>Map<K,List<V>> | asMap(ListMultimap<K,V> multimap) 返回 multimap.asMap() 视图,从类型 Map<k, collection |
static <K,V>Map<K,Collection<V>> | asMap(Multimap<K,V> multimap) 返回 multimap.asMap() 视图. |
static <K,V>Map<K,Set<V>> | asMap(SetMultimap<K,V> multimap) 返回 multimap.asMap() 视图,从类型 Map<k, collection |
static <K,V>Map<K,SortedSet<V>> | asMap(SortedSetMultimap<K,V> multimap) 返回 multimap.asMap() 视图, 从类型 Map<k, collection |
static <K,V>Multimap<K,V> | filterEntries(Multimap<K,V> unfiltered, Predicate<? super Map.Entry<K,V>> entryPredicate) 返回给定unfilteredMap.Entry中的Entry值通过给定entryPredicate过滤后的map. |
static <K,V>SetMultimap<K,V> | filterEntries(SetMultimap<K,V> unfiltered, Predicate<? superMap.Entry<K,V>> entryPredicate) 返回给定unfilteredMap.Entry中的Entry值通过给定entryPredicate过滤后的map. |
static <K,V>ListMultimap<K,V> | filterKeys(ListMultimap<K,V> unfiltered, Predicate<? super K>keyPredicate) 返回给定unfilteredMap中的Key值通过给定keyPredicate过滤后的Map. |
static <K,V>Multimap<K,V> | filterKeys(Multimap<K,V> unfiltered, Predicate<? super K> keyPredicate) 返回给定unfilteredMap中的Key值通过给定keyPredicate过滤后的Map. |
static <K,V>SetMultimap<K,V> | filterKeys(SetMultimap<K,V> unfiltered, Predicate<? super K> keyPredicate)返回给定unfilteredMap中的Key值通过给定keyPredicate过滤后的Map. |
static <K,V>Multimap<K,V> | filterValues(Multimap<K,V> unfiltered, Predicate<? super V>valuePredicate) 返回给定unfilteredMap中的Valie值通过给定keyPredicate过滤后的Map. |
static <K,V>SetMultimap<K,V> | filterValues(SetMultimap<K,V> unfiltered, Predicate<? super V>valuePredicate)返回给定unfilteredMap中的Value值通过给定keyPredicate过滤后的Map. |
static <T,K,V,M extendsMultimap<K,V>> Collector<T,?,M> | flatteningToMultimap(Function<? super T,? extends K> keyFunction, Function<? super T,? extends Stream<? extends V>> valueFunction, Supplier<M>multimapSupplier) 通过函数过滤,返回 Collector |
static <K,V>SetMultimap<K,V> | forMap(Map<K,V> map) 为特定的map返回 multimap 视图. |
static <K,V>ImmutableListMultimap<K,V> | index(Iterable<V> values, Function<? super V,K> keyFunction) 创建一个索引ImmutableListMultimap,其中包含将指定函数应用于Iterable值中的每个项的结果. |
static <K,V>ImmutableListMultimap<K,V> | index(Iterator<V> values, Function<? super V,K> keyFunction) 创建一个索引ImmutableListMultimap,其中包含将指定函数应用于Iterator值中的每个项的结果. |
static <K,V,M extendsMultimap<K,V>> M | invertFrom(Multimap<? extends V,? extends K> source, M dest) 将源中的每个键值映射复制到dest,其键和值相反. |
static <K,V>ListMultimap<K,V> | newListMultimap(Map<K,Collection<V>> map, Supplier<? extends List<V>> factory) 根据提供的factory工厂类,创建一个 ListMultimap. |
static <K,V>Multimap<K,V> | newMultimap(Map<K,Collection<V>> map, Supplier<? extends Collection<V>> factory) 根据提供的factory工厂类,创建一个 Multimap. |
static <K,V>SetMultimap<K,V> | newSetMultimap(Map<K,Collection<V>> map, Supplier<? extends Set<V>> factory) 根据提供的factory工厂类,创建一个 SetMultimap . |
static <K,V>SortedSetMultimap<K,V> | newSortedSetMultimap(Map<K,Collection<V>> map, Supplier<? extendsSortedSet<V>> factory) 根据提供的factory工厂类,创建一个 SortedSetMultimap. |
static <K,V>ListMultimap<K,V> | synchronizedListMultimap(ListMultimap<K,V> multimap) 返回由指定的multimap支持的synchronized(线程安全)ListMultimap. |
static <K,V>Multimap<K,V> | synchronizedMultimap(Multimap<K,V> multimap) 返回 由指定的multimap支持的synchronized(线程安全)multimap. |
static <K,V>SetMultimap<K,V> | synchronizedSetMultimap(SetMultimap<K,V> multimap) 返回一个由指定的multimap支持的synchronized(线程安全)SetMultimap. |
static <K,V>SortedSetMultimap<K,V> | synchronizedSortedSetMultimap(SortedSetMultimap<K,V> multimap) 返回一个由指定的multimap支持的synchronized(线程安全)SortedSetMultimap. |
static <T,K,V,M extendsMultimap<K,V>> Collector<T,?,M> | toMultimap(Function<? super T,? extends K> keyFunction, Function<? superT,? extends V> valueFunction,Supplier<M> multimapSupplier) 通过函数过滤,返回 Collector. |
static <K,V1,V2>ListMultimap<K,V2> | transformEntries(ListMultimap<K,V1> fromMap, Maps.EntryTransformer<? superK,? super V1,V2> transformer) 返回 ListMultimap 视图,其Entry为给定fromMap.Entry通过给定EntryTransformer转换后的值. |
static <K,V1,V2>Multimap<K,V2> | transformEntries(Multimap<K,V1> fromMap, Maps.EntryTransformer<? super K,?super V1,V2> transformer) 返回 multimap 视图,其Entry为给定fromMap.Entry通过给定EntryTransformer转换后的值. |
static <K,V1,V2>ListMultimap<K,V2> | transformValues(ListMultimap<K,V1> fromMultimap, Function<? super V1,V2>function) 返回ListMultimap的视图,其中每个值由函数转换. |
static <K,V1,V2>Multimap<K,V2> | transformValues(Multimap<K,V1> fromMultimap, Function<? super V1,V2>function) 返回 multimap 视图,其中每个值由函数转换. |
static <K,V>ListMultimap<K,V> | unmodifiableListMultimap(ImmutableListMultimap<K,V> delegate) 已过时。 |
static <K,V>ListMultimap<K,V> | unmodifiableListMultimap(ListMultimap<K,V> delegate) 返回指定ListMultimap的n个不可修改的视图. |
static <K,V>Multimap<K,V> | unmodifiableMultimap(ImmutableMultimap<K,V> delegate) 已过时。 |
static <K,V>Multimap<K,V> | unmodifiableMultimap(Multimap<K,V> delegate) 返回指定multimap的n个不可修改视图. |
static <K,V>SetMultimap<K,V> | unmodifiableSetMultimap(ImmutableSetMultimap<K,V> delegate) 已过时。 |
static <K,V>SetMultimap<K,V> | unmodifiableSetMultimap(SetMultimap<K,V> delegate) 返回指定SetMultima的n个不可修改的视图p. |
static <K,V>SortedSetMultimap<K,V> | unmodifiableSortedSetMultimap(SortedSetMultimap<K,V> delegate) 返回指定SortedSetMultimap的n个不可修改的视图. |
三、测试类
package com.example.guava.collect;
import com.google.common.collect.*;
import org.junit.Test;
public class MultimapsTest {
@Test
public void asMap() {
ListMultimap<String, String> listMultimap = LinkedListMultimap.create();
listMultimap.put("foo", "A");
listMultimap.put("foo", "B");
listMultimap.put("foo", "C");
// 遍历
listMultimap.forEach((k, v) -> System.out.println("k:" + k + ", v:" + v));
System.out.println(listMultimap);
}
@Test
public void containsOccurrences(){
Multiset<String> set1 = HashMultiset.create();
set1.add("a", 2);
set1.add("b");
set1.add("b");
Multiset<String> set2 = HashMultiset.create();
set2.add("a", 5);
System.out.println(set1.containsAll(set2)); // true
System.out.println(Multisets.containsOccurrences(set1, set2)); // returns false
System.out.println(set2.remove("a",2)); // 5
System.out.println(set2.size()); // 3
System.out.println(set2.removeAll(set1)); // true
System.out.println(set2.size()); // 0
System.out.println(set2.isEmpty()); // true
}
@Test
public void copyHighestCountFirst(){
Multiset<String> multiset = HashMultiset.create();
multiset.add("a", 3);
multiset.add("b", 5);
multiset.add("c", 1);
multiset.add("a");
multiset.add("a");
multiset.add("a");
System.out.println(multiset.count("a")); // 6
System.out.println(multiset.size()); // 12
ImmutableMultiset<String> highestCountFirst = Multisets.copyHighestCountFirst(multiset);
System.out.println(highestCountFirst.size()); // 12
System.out.println(highestCountFirst.entrySet()); // [a x 6, b x 5, c]
System.out.println(highestCountFirst.elementSet()); // [a, b, c]
}
@Test
public void retainOccurrences(){
Multiset<String> set1 = HashMultiset.create();
set1.add("a", 2);
set1.add("b");
set1.add("b");
Multiset<String> set2 = HashMultiset.create();
set2.add("a", 5);
System.out.println(set1); // [a x 2, b x 2]
System.out.println(set2); // [a x 5]
Multisets.retainOccurrences(set1, set2);
System.out.println("\n"+set1); // [a x 2]
System.out.println(set2); // [a x 5]
}
@Test
public void difference_sum_union(){
Multiset<String> set1 = HashMultiset.create();
set1.add("a", 3);
set1.add("b", 2);
set1.add("c", 1);
Multiset<String> set2 = HashMultiset.create();
set2.add("a");
set2.add("c");
set2.add("e");
// 差集
Multiset<String> differenceSet = Multisets.difference(set1, set2);
System.out.println(differenceSet); // [a x 2, b x 2]
// 合集
Multiset<String> sumSet = Multisets.sum(set1, set2);
System.out.println(sumSet); // [a x 4, b x 2, c x 2, e]
// 并集
Multiset<String> unionSet = Multisets.union(set1, set2);
System.out.println(unionSet); // [a x 3, b x 2, c, e]
}
}四、相关文章
未经允许请勿转载:程序喵 » Google Guava 快速入门 —— 【集合工具】Multimaps 类
程序喵