Google Guava 快速入门 —— 【集合工具】Multimaps 类

Google Guava 快速入门.jpg

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> 转换到 Map<k, list>.
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> 转换到 Map<k, set>.
static <K,V>Map<K,SortedSet<V>>asMap(SortedSetMultimap<K,V> multimap) 
返回 multimap.asMap() 视图, 从类型 Map<k, collection> 转换到 Map<k, sortedset>.
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>> MinvertFrom(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 类

点  赞 (0) 打  赏
分享到: