Guava Collect
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的更多相关文章
- Guava 3: 集合Collections
一.引子 Guava 对JDK集合的拓展,是最成熟且最受欢迎的部分.本文属于Guava的核心,需要仔细看. 二.Guava 集合 2.1 Immutable Collections不可变集合 1.作用 ...
- kafka+storm+hbase
kafka+storm+hbase实现计算WordCount. (1)表名:wc (2)列族:result (3)RowKey:word (4)Field:count 1.解决: (1)第一步:首先准 ...
- spark机器学习从0到1基本的统计工具之(三)
给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型 ...
- Guava学习笔记(4):Ordering犀利的比较器
转自:http://www.cnblogs.com/peida/p/Guava_Ordering.html Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering ...
- Guava学习笔记(3):复写的Object常用方法
转自:http://www.cnblogs.com/peida/p/Guava_Objects.html 在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals ...
- Guava学习笔记:Google Guava 类库简介
http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...
- 使用Guava提供的filter过滤集合
正常情况下,我们声明一个List需要如下代码 List<String> list = new ArrayList<>(); list.add("AAA"); ...
- Guava学习笔记:Guava新集合-Table等
Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现.为此Guava ...
- Guava学习笔记:Ordering犀利的比较器
Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强.它非常容易扩展,可以轻松构造复杂的comparator,然后用在 ...
随机推荐
- Ext checkbox
Ext.require([ 'Ext.grid.*', 'Ext.data.*', 'Ext.util.*', 'Ext.grid.PagingScroller', ...
- <blockquote>标签,长文本引用
<blockquote>的作用也是引用别人的文本.但它是对长文本的引用,如在文章中引入大段某知名作家的文字,这时需要这个标签. 等等,上一节<q>标签不是也是对文本的引用吗?不 ...
- Swift - 07 - 布尔类型
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- 一个小玩具:NDK编译FFmpeg的例子
FFmpeg NDK编译 和最简单的APK 准备 硬件: 一台电脑,实验在Lenovo T430上 一个Android设备,实验在 三星S3/A7 编译环境: Ubuntu 14.04 (ant\ja ...
- HTML语义化标签(一)
总所周知,现在的网页是由HTML.CSS.JS三大元素组成,而HTML是其中最重要的部分,是整个网页的骨架,CSS和js在骨架的基础上进行相应的修饰,使得网页成为一个有血有肉,可以动的“人”.如果HT ...
- REST简介及设计原则
rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 简介 REST (R ...
- angularjs现学现记之—$apply()和$digest()
angularjs的双向数据绑定是个重要的特性,它让我们的代码简洁了许多,然而它又是如何知道数据发生了变化并改变页面的呢.最近看了一篇介绍觉得十分有用 首先,在angularjs中是有$watch事件 ...
- Flask学习记录之使用Werkzeug散列密码
数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算 security库中 generate_password_hash(password,metho ...
- 用python+selenium获取XX省交通违章数据
前言: 目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据.以下是实施过程. 一.首先,用火狐浏览器打开XX省交管网,分析页面信息: 可以看到共有4种查询种类,我 ...
- rename 后缀
for file in $(find . -name "*.del" -type f);do mv "$file" "${file%.del}&quo ...