Guava是什么

进入新公司就会接触一些新的东东,Guava就是一个,Guava是Google的一个开源类库,丰富了JDK的API,并且使用起来非常方便,本文介绍的是Guava collect包下的一些经常使用工具类。

项目主页:https://code.google.com/p/guava-libraries/

源代码下载(GIT):git clone https://code.google.com/p/guava-libraries/

Maven依赖:

<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>17.0</version>

代码演示

List

普通情况下。我们创建一个List集合。使用例如以下代码:

List<String> strList = new ArrayList<String>();
strList.add("1");
strList.add("2");
strList.add("3");

使用Collections工具类,能够简化:

List<String> strList = new ArrayList<String>();
Collections.addAll(strList, "1", "2", "3");

使用Guava,能够进一步简化:

List<String> strList = Lists.newArrayList("1", "2", "3");

Lists.newArrayList(“1”, “2”, “3”)事实上就是对第二步的一个封装,而且这里使用了Java泛型判断,能够看一下源代码:

public static <E> ArrayList<E> newArrayList(E... elements) {
checkNotNull(elements); // for GWT
// Avoid integer overflow when a large array is passed in
int capacity = computeArrayListCapacity(elements.length);
ArrayList<E> list = new ArrayList<E>(capacity);
Collections.addAll(list, elements);
return list;
}

JDK7以后,能够去掉实现类中的泛型声明:

List<String> strList = new ArrayList<>;

Oracle也意识到了在等号右面又写一遍泛型是件非常2的事情。可是依旧不如Guava方便。

不可变List

JDK中有两种创建不可变集合的API。且仅仅能包括一个元素,例如以下代码:

List<String> strList = Collections.singletonList("1");// 返回一个仅仅包括指定对象的不可变列表
List<String> strList = Collections.emptyList();// 返回空的列表(不可变的)

但通常我们都须要集合中包括多个元素。这两种API特殊情况下能够用到。

Collections还能够创建一个不可变的视图,例如以下代码:

List<String> strList = new ArrayList<String>();
Collections.addAll(strList, "1", "2", "3");
List<String> unmodifiableList = Collections.unmodifiableList(strList);

unmodifiableList是通过包装可变strList生成。其内部引用的是同一个对象,尽管unmodifiableList是无法改变了,可是strList依旧能够改变。如:

strList.add("10");

unmodifiableList也随之变化,所以说这是创建一个不可变的视图

JDK中还能够创建一种仅仅能改动,但不能添加和删除的List,例如以下代码:

String[] strArray = new String[] {"1", "2", "3"};
List<String> strList = Arrays.asList(strArray);

能够想想,这是由数组决定的特性,这样的List实际上就是数组的一个变形,List更方便开发人员来使用。

Guava能够创建一个全然不可变的集合,例如以下代码:

List<String> strList = ImmutableList.of("1", "2", "3");

本文不过对Guava Collect的管中窥豹。也只介绍了List部分,很多其它请移步:https://code.google.com/p/guava-libraries/wiki/GuavaExplained?tm=6

本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/27962647。转载请注明。

Guava Collect的更多相关文章

  1. Guava 3: 集合Collections

    一.引子 Guava 对JDK集合的拓展,是最成熟且最受欢迎的部分.本文属于Guava的核心,需要仔细看. 二.Guava 集合 2.1 Immutable Collections不可变集合 1.作用 ...

  2. kafka+storm+hbase

    kafka+storm+hbase实现计算WordCount. (1)表名:wc (2)列族:result (3)RowKey:word (4)Field:count 1.解决: (1)第一步:首先准 ...

  3. spark机器学习从0到1基本的统计工具之(三)

      给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型 ...

  4. Guava学习笔记(4):Ordering犀利的比较器

    转自:http://www.cnblogs.com/peida/p/Guava_Ordering.html Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering ...

  5. Guava学习笔记(3):复写的Object常用方法

    转自:http://www.cnblogs.com/peida/p/Guava_Objects.html 在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals ...

  6. Guava学习笔记:Google Guava 类库简介

    http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...

  7. 使用Guava提供的filter过滤集合

    正常情况下,我们声明一个List需要如下代码 List<String> list = new ArrayList<>(); list.add("AAA"); ...

  8. Guava学习笔记:Guava新集合-Table等

    Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现.为此Guava ...

  9. Guava学习笔记:Ordering犀利的比较器

    Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强.它非常容易扩展,可以轻松构造复杂的comparator,然后用在 ...

随机推荐

  1. Ext checkbox

    Ext.require([     'Ext.grid.*',     'Ext.data.*',     'Ext.util.*',     'Ext.grid.PagingScroller',   ...

  2. <blockquote>标签,长文本引用

    <blockquote>的作用也是引用别人的文本.但它是对长文本的引用,如在文章中引入大段某知名作家的文字,这时需要这个标签. 等等,上一节<q>标签不是也是对文本的引用吗?不 ...

  3. Swift - 07 - 布尔类型

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  4. 一个小玩具:NDK编译FFmpeg的例子

    FFmpeg NDK编译 和最简单的APK 准备 硬件: 一台电脑,实验在Lenovo T430上 一个Android设备,实验在 三星S3/A7 编译环境: Ubuntu 14.04 (ant\ja ...

  5. HTML语义化标签(一)

    总所周知,现在的网页是由HTML.CSS.JS三大元素组成,而HTML是其中最重要的部分,是整个网页的骨架,CSS和js在骨架的基础上进行相应的修饰,使得网页成为一个有血有肉,可以动的“人”.如果HT ...

  6. REST简介及设计原则

    rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 简介 REST (R ...

  7. angularjs现学现记之—$apply()和$digest()

    angularjs的双向数据绑定是个重要的特性,它让我们的代码简洁了许多,然而它又是如何知道数据发生了变化并改变页面的呢.最近看了一篇介绍觉得十分有用 首先,在angularjs中是有$watch事件 ...

  8. Flask学习记录之使用Werkzeug散列密码

    数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算 security库中 generate_password_hash(password,metho ...

  9. 用python+selenium获取XX省交通违章数据

    前言: 目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据.以下是实施过程. 一.首先,用火狐浏览器打开XX省交管网,分析页面信息: 可以看到共有4种查询种类,我 ...

  10. rename 后缀

    for file in $(find . -name "*.del" -type f);do mv "$file" "${file%.del}&quo ...