源码阅读之Sets

举个栗子:

Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6);
        Set<Integer> set2 = Sets.newHashSet(5, 6, 7, 8, 9, 10);
        Set<Integer> setUnion = Sets.union(set1, set2);//返回两个集合并集的不可修改视图
        setUnion.forEach(i -> log.info(i.toString()));
        log.info("-----------------");

        Set<Integer> setInterSection = Sets.intersection(set1, set2);//返回两个集合交集的不可修改视图
        setInterSection.forEach(i -> log.info(i.toString()));
        log.info("-----------------");

        Set<Integer> setFilter1 = Sets.filter(set1, i -> i > 3);
        set1.add(0);set1.forEach(i -> log.info("?{}?",i.toString()));
        setFilter1.forEach(i -> log.info(i.toString()));//过滤器。函数式接口Predicate过滤。返回符合条件的元素,可以修改,需要注意的是,修改是修改原来的集合set1

        log.info("--------");
        Set<Integer> setFilter2 = Sets.filter(set2, i -> i > 8);
        setFilter2.forEach(i -> log.info(i.toString()));//过滤器。函数式接口Predicate过滤
        log.info("-----------------");

        Set<Integer> setDifference = Sets.difference(set1,set2);//返回两个集合并集的不可修改视图
        setDifference.forEach(i -> log.info(i.toString()));
 
1.Sets.union(set1, set2);

方法写了很多校验,然后返回一个新ImmutableSet<E> 把两个set   装入,set自动去重 返回。

2.Sets.intersection(set1, set2);

用guava 的 Iterators.filter 方法过滤,把set2 做为函数式接口 Predicate 传入,遍历 set1 ,如果 set2 中不包括 set1 中的元素,则continue

3.Sets.filter(set1, i -> i > 3);

惰性模式,使用的时候用 Iterators.filter 方法过滤

4.Sets.difference(set1,set2);

与Sets.intersection(set1, set2);很类似,只不过传入 Predicate ,是传入 Predicates.not(Predicates.in(set2)); 就是 set2 的取非。

处理流程一样。

猜你喜欢

转载自blog.csdn.net/w535921917/article/details/85038841
今日推荐