Guava 集合工具类 Multisets
提供作用于或生成 Multiset 的静态方法。
一、接口声明
以下是 com.google.common.collect.Multisets 接口的声明:
@GwtCompatiblepublic final class Multisets extends Object
二、接口方法
官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/collect/Multisets.html
| 修饰符和类型 | 方法描述 |
|---|---|
static boolean | containsOccurrences(Multiset<?> superMultiset, Multiset<?> subMultiset) 返回 true 如果 subMultiset.count(o) <= superMultiset.count(o),o为元素. |
static <E>ImmutableMultiset<E> | copyHighestCountFirst(Multiset<E> multiset) 返回multiset的副本作为Immutable Multiset. |
static <E>Multiset<E> | difference(Multiset<E> multiset1, Multiset<?> multiset2) 返回不可修改的差集视图. |
static <E>Multiset<E> | filter(Multiset<E> unfiltered, Predicate<? super E> predicate) 返回满足predicate的未过滤元素的视图. |
static <E>Multiset.Entry<E> | immutableEntry(E e, int n) 返回具有指定元素和计数的不可变multiset.Entry |
static <E>Multiset<E> | intersection(Multiset<E> multiset1, Multiset<?> multiset2) 返回两个多重集的交集的不可修改的视图. |
static boolean | removeOccurrences(Multiset<?> multisetToModify, Iterable<?> occurrencesToRemove)For each occurrence of an element e in occurrencesToRemove, removes one occurrence of e in multisetToModify. |
static boolean | removeOccurrences(Multiset<?> multisetToModify, Multiset<?> occurrencesToRemove)For each occurrence of an element e in occurrencesToRemove, removes one occurrence of e in multisetToModify. |
static boolean | retainOccurrences(Multiset<?> multisetToModify, Multiset<?> multisetToRetain) 修改multisetToModify,使其元素e的计数最多为multisetToRetain.count(e). |
static <E>Multiset<E> | sum(Multiset<? extends E> multiset1, Multiset<? extends E> multiset2) 返回两个集合之和的不可修改视图. |
static <T,E,Mextends Multiset<E>> Collector<T,?,M> | toMultiset(Function<? super T,E> elementFunction, ToIntFunction<? super T>countFunction,Supplier<M> multisetSupplier) Returns a Collector that accumulates elements into a multiset created via the specified Supplier, whose elements are the result of applying elementFunction to the inputs, with counts equal to the result of applying countFunction to the inputs. |
static <E>Multiset<E> | union(Multiset<? extends E> multiset1, Multiset<? extends E> multiset2) 返回两个multisets的并集的不可修改的视图。 |
static <E>Multiset<E> | unmodifiableMultiset(ImmutableMultiset<E> multiset) 已过时 |
static <E>Multiset<E> | unmodifiableMultiset(Multiset<? extends E> multiset) 返回指定的 multiset 不可修改视图 |
static <E>SortedMultiset<E> | unmodifiableSortedMultiset(SortedMultiset<E> sortedMultiset) 返回指定的已排序的 multiset 不可修改视图. |
三、测试类
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 快速入门 —— 【集合工具】Multisets 类
程序喵