说说 Google Guava 集合

Guava 工程是被 Google 的 Java 项目广泛依赖的核心库。

谷歌从日常的工作中提取出了很多高效率的 API 方法,从而诞生了 guava 工具包。

guava 的优点是:

  1. 高效设计良好的 API ;
  2. 遵循高效的 java 语法实践;
  3. 代码更简洁,节省时间与资源,提高开发生产力。

guava 的意思是番石榴。

Guava 包提供了很多特性,这次我们主要讲讲集合。

1 初始化

利用 Guava 的静态工厂方法,可以更简洁地初始化集合中的元素。

JDK 方式:

Guava 方式:

2 Bimap

Bimap 是一个映射,可以通过 key 得到 value ,也可以通过 value 得到 key 。

Java 集合类库中的 Map ,键( Key )是唯一的,而值( Value )可以不唯一 。而 bimap 要求 key 和 value 都唯一,如果 key 不唯一则覆盖 key ,如果 value 不唯一则抛异常。

3 Multiset

Set 的特性可以分为两种:是否有序和是否允许重复。根据这两个特性可以画出一个四象限图。可以看出,Multiset 填补了无序+允许重复这一区域的空白。

Multiset 提供了很多集合方面的实现与操作。

HashMultiset: 元素存放于HashMap;
LinkedHashMultiset: 元素存放于 LinkedHashMap ,即元素的排列顺序由第一次放入的顺序决定;
TreeMultiset: 元素被排序存放于 TreeMap;
EnumMultiset: 元素必须是 enum 类型;
ImmutableMultiset: 不可修改的 Mutiset。

普通集合操作类似于我们在大学时曾经学过的集合计算。

比较特别的是,部分合并操作。

可以看到,如果 A U B,只是把集合 A 所没有的元素合并过来。在左边的元素是主导这次合并规则的元素。

4 Multimap

Multimap 中,一个 key ,可以对应多个值。形如: Map<K , Set<V>> 这样的数据结构。

假设有一组单词,我们可以使用 Multimap 来把这些单词依据长度分组:

输出:

代码步骤说明:

  1. 首先使用流式编程,初始化单词组;
  2. 利用函数式编程,定义分组规则,这里依据单词长度进行分组;
  3. 利用 Multimaps.index() 方法执行分组。

利用 Multimap ,我们还可以实现映射反转:

输出:

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/108308447