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

Google Guava 快速入门.jpg

Guava 集合工具类 Sets

提供 Set 实例有关的静态实用程序方法。

一、接口声明

以下是 com.google.common.collect.Sets 接口的声明:

@GwtCompatible(emulated=true)
public final class Sets
    extends Object

二、接口方法

官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/collect/Sets.html

修饰符和类型方法描述
static <B> Set<List<B>>cartesianProduct(List<? extends Set<? extends B>> sets) 
返回通过从各给定集中选择一个元素所形成每一个可能的集合.
static <B> Set<List<B>>cartesianProduct(Set<? extends B>... sets) 
返回通过从各给定集中选择一个元素所形成每一个可能的集合.
static <E> Set<Set<E>>combinations(Set<E> set, int size) 
返回大小为set的所有子集的集合.
static <E extends Enum<E>> EnumSet<E>complementOf(Collection<E> collection) 
创建一个EnumSet包括不属于指定集合中的所有枚举值.
static <E extends Enum<E>> EnumSet<E>complementOf(Collection<E> collection, Class<E> type) 
创建一个EnumSet包括不属于指定集合中的所有枚举值.
static <E> Sets.SetView<E>difference(Set<E> set1, Set<?> set2) 
返回两个set集合的差的不可修改SetView.
static <E> NavigableSet<E>filter(NavigableSet<E> unfiltered, Predicate<? super E> predicate) 
返回传入NavigableSet集合unfiltered中满足给定Predicate的元素集合NavigableSet.
static <E> Set<E>filter(Set<E> unfiltered, Predicate<? super E> predicate) 
返回传入Set集合unfiltered中满足给定Predicate的元素集合Set.
static <E> SortedSet<E>filter(SortedSet<E> unfiltered, Predicate<? super E> predicate) 
返回传入SortedSet集合unfiltered中满足给定Predicate的元素集合SortedSet.
static <E extends Enum<E>> ImmutableSet<E>immutableEnumSet(E anElement, E... otherElements) 
返回一个包含给定枚举元素的不可变的Set实例.
static <E extends Enum<E>> ImmutableSet<E>immutableEnumSet(Iterable<E> elements) 
返回一个包含给定枚举元素的不可变的Set实例.
static <E> Sets.SetView<E>intersection(Set<E> set1, Set<?> set2) 
返回两个set集合的交集的不可修改SetView.
static <E> Set<E>newConcurrentHashSet() 
创建一个线程安全的Set,由ConcurrentHashMap的实例支持,因此进行了相同的并发性担保,与HashSet不同的是,这个Set不允许null元素,该Set是可序列化的.
static <E> Set<E>newConcurrentHashSet(Iterable<? extends E> elements) 
创建一个线程安全的Set,由ConcurrentHashMap的实例支持,因此进行了相同的并发性担保,与HashSet不同的是,这个Set不允许null元素,该Set是可序列化的.
static <E>CopyOnWriteArraySet<E>newCopyOnWriteArraySet() 
创建一个空的CopyOnWriteArraySet实例.
static <E>CopyOnWriteArraySet<E>newCopyOnWriteArraySet(Iterable<? extends E> elements) 
创建一个包含给定元素的CopyOnWriteArraySet实例.
static <E extends Enum<E>> EnumSet<E>newEnumSet(Iterable<E> iterable, Class<E> elementType) 
返回一个新的可变的EnumSet实例,该实例包含按自然顺序排列的给定元素.
static <E> HashSet<E>newHashSet() 
返回一个可变的空的HashSet实例.
static <E> HashSet<E>newHashSet(E... elements) 
返回一个可变买的HashSet包含给定的元素.
static <E> HashSet<E>newHashSet(Iterable<? extends E> elements) 
返回一个可变的HashSet包含给定的元素,给定元素实现Iterable接口.
static <E> HashSet<E>newHashSet(Iterator<? extends E> elements) 
返回一个可变的HashSet包含给定的元素,给定元素实现Iterator接口.
static <E> HashSet<E>newHashSetWithExpectedSize(int expectedSize) 
构造一个期望长度为expectedSize的HashSet实例.
static <E> Set<E>newIdentityHashSet() 
创建一个空的Set,使用特性来确定是否相等.
static <E> LinkedHashSet<E>newLinkedHashSet() 
创建一个可变的、空的LinkedHashSet实例.
static <E> LinkedHashSet<E>newLinkedHashSet(Iterable<? extends E> elements) 
构造一个包含给定元素的LinkedHashSet实例.
static <E> LinkedHashSet<E>newLinkedHashSetWithExpectedSize(int expectedSize) 
构造一个期望长度为expectedSize的LinkedHashSet实例.
static <E> Set<E>newSetFromMap(Map<E,Boolean> map) 
已过时. 请使用 Collections.newSetFromMap(java.util.Map),返回一个由给定map支持的Set.
static <E extends Comparable>TreeSet<E>newTreeSet() 
返回一个可变的空的TreeSet实例
static <E> TreeSet<E>newTreeSet(Comparator<? super E> comparator) 
创建一个具有给定的比较器可变TreeSet的实例.
static <E extends Comparable>TreeSet<E>newTreeSet(Iterable<? extends E> elements) 
返回一个可变的包含给定元素的TreeSet实例.
static <E> Set<Set<E>>powerSet(Set<E> set) 
返回一个set,包含给定set的所有可能父级集合.
static <K extends Comparable<?super K>> NavigableSet<K>subSet(NavigableSet<K> set, Range<K> range) 
返回set的部分视图,其元素包含在range中。
static <E> Sets.SetView<E>symmetricDifference(Set<? extends E> set1, Set<? extends E> set2) 
返回两个set集合的对称差的不可修改SetView.
static <E> NavigableSet<E>synchronizedNavigableSet(NavigableSet<E> navigableSet) 
返回一个同步的(线程安全的)NavigableSet,由指定的NavigableSet支持.
static <E extends Enum<E>> Collector<E,?,ImmutableSet<E>>toImmutableEnumSet() 
返回一个收集器,它将输入元素累积到一个新的ImmutableSet中,并使用专门用于枚举的实现.
static <E> Sets.SetView<E>union(Set<? extends E> set1, Set<? extends E> set2) 
返回两个set集合的并集的不可修改SetView.
static <E> NavigableSet<E>unmodifiableNavigableSet(NavigableSet<E> set) 
返回指定NavigableSet的不可修改视图.

三、测试类

package com.example.guava.collect;

import com.google.common.base.Predicate;
import com.google.common.collect.Sets;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Set;

public class SetsTest {

    /**
     * filter:返回传入Set集合unfiltered中满足给定Predicate的元素集合Set
     */
    @Test
    public void testFilter() {
        Set<String> set = Sets.newHashSet("i like u", "i miss u", "i love u");
        Predicate<String> predicate = new Predicate<String>() {
            @Override
            public boolean apply(String input) {
                //过滤包含字母l的元素
                return input.contains("l");
            }
        };
        System.out.println(Sets.filter(set, predicate));                        // [i like u, i love u]
        System.out.println(Sets.filter(set, input -> input.contains("l")));     // [i like u, i love u]
    }

    /**
     * difference:返回两个set集合的差的不可修改SetView
     * A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做A与B的差集
     */
    @Test
    public void testDifference() {
        Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5);
        Set<Integer> set2 = Sets.newHashSet(1, 3, 5, 7, 9);
        System.out.println(Sets.difference(set1, set2));        // [2, 4]
    }

    /**
     * symmetricDifference:返回两个set集合的对称差的不可修改SetView
     * 对称差,即两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合
     */
    @Test
    public void testSymmetricDifference() {
        Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5);
        Set<Integer> set2 = Sets.newHashSet(1, 3, 5, 7, 9);
        System.out.println(Sets.symmetricDifference(set1, set2));       // [2, 4, 9, 7]
    }

    /**
     * intersection:返回两个set集合的交集的不可修改SetView
     * 两个集合A和集合B的交集是指含有所有既属于A又属于B的元素,而没有其他元素的集合
     */
    @Test
    public void testIntersection() {
        Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5);
        Set<Integer> set2 = Sets.newHashSet(1, 3, 5, 7, 9);
        System.out.println(Sets.intersection(set1, set2));      // [1, 3, 5]
    }

    /**
     * Union:返回两个set集合的并集的不可修改SetView
     * 若A和B是集合,则A和B并集是有所有A的元素和所有B的元素,而没有其他元素的集合
     */
    @Test
    public void testUnion() {
        Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5);
        Set<Integer> set2 = Sets.newHashSet(1, 3, 5, 7, 9);
        System.out.println(Sets.union(set1, set2));     // [1, 2, 3, 4, 5, 9, 7]
    }

    /**
     * cartesianProduct:返回通过从各给定集中选择一个元素所形成每一个可能的集合
     */
    @Test
    public void testCartesianProduct() {
        Set<String> set1 = Sets.newHashSet("i love u", "i hate u");
        Set<String> set2 = Sets.newHashSet("tom", "jerry");
        Set<List<String>> sets = Sets.cartesianProduct(set1, set2);
        System.out.println(sets);       // [[i hate u, tom], [i hate u, jerry], [i love u, tom], [i love u, jerry]]
    }

    /**
     * powerSet:返回一个set,包含给定set的所有可能父级集合
     */
    @Test
    public void testPowerSet() {
        Set<String> set1 = Sets.newHashSet("A", "B", "C");
        Set<Set<String>> sets = Sets.powerSet(set1);
//        for (Set<String> set : sets) {
//            System.out.println(set);
//        }
        System.out.println(Arrays.toString(sets.toArray()));    // [[], [A], [B], [A, B], [C], [A, C], [B, C], [A, B, C]]
    }
}

四、相关文章




未经允许请勿转载:程序喵 » Google Guava 快速入门 —— 【集合工具】Sets 类

点  赞 (1) 打  赏
分享到: