Google Guava入门(一)
Guava作为Java编程的助手,可以提升开发效率,对Guava设计思想的学习则极大的有益于今后的编程之路。故在此对《Getting Started with Google Guava》一书进行翻译并实战,未予审校,错误之处请大家不吝赐教。
全文目录如下:
Google Guava入门
前言
目前,在软件行业内,Java仍然是最主要的开发语言之一,受欢迎程度依然保持着。Java的一个优势是其开发人员可以获取丰富的第三方库,帮助开发人员更加高效的编码。Guava就是一个很棒的库,在开发活动中给予开发者极大的提升。此外,随着我们开始使用Guava,我们将获得很多灵感,用于自己代码的实现。
本书覆盖的内容
第一章,介绍Guava,此外给出使用Guava的例子;
第二章,基本的Guava工具,包括使用字符串和对象的基本功能;
第三章,Guava函数式变成,介绍Guava提供的函数式编程特性;
第四章,使用集合,包括增强现有Java集合功能的工具和类;
第五章,并发,展示了如何通过使用Guava的并发抽象化帮助我们更好的编写并发代码;
第六章,Guava缓存,介绍Guava缓存,包括一个自加载缓存;
第七章,EventBus类,通过它完成基于事件的编程;
第八章,使用文件类,展示了Guava如何极大地简化文件的读写;
第九章,零碎工作覆盖了规避null的Optional类,哈希函数,BloomFilter数据结构。
入门
本章涵盖了一些Guava的历史,然后我们会写一个例子,说明为什么你需要一个成熟的库而不是从头开始自己写。我们会说明在哪可以获得Guava库,如何安装,最好,如何启动本书所带的源码。
Guava简介
什么是Guava?Google Guava源于2007年的"Google Collections Library",提供使用Java集合的工具,已经进化为Java开发者的基础工具箱。Guava拥有对很多人有用的一些东西。如与字符串、集合、并发、I/O和反射的协作的类。Function接口提供了Java函数式编程的能力,并且极大地简化了代码。Suppier接口帮助creational pattern(23种设计模式之一)。但是,Guava不仅仅是从Java中提取的一些样板的抽象化,或者一些我们都认为在Java中自带的便利方法。Guava涉及编写良好的代码,促使代码更有弹性、更加简洁。所有建议不仅仅是使用Guava,更要读一下它的源码,学习运行的原理。然后将同样的准则用于自己所写的代码之中。最后,祝大家学的愉快!
Guava使用实例
作为软件开发者,我们认为可以做所有的事情。我们本能地希望写属于自己的库,这些库用于处理我们日常的事务。当然,我们认为自己写的代码是刀枪不入的,并且我们了解为何写单元测试,并且能够通过。这里,我有些不好的消息告诉大家,我们并没有自己想象的那么优秀。实际上呢,这与聪明程度无关,更多的是我们所写的代码不是不仅仅需要通过单元测试,还要被很多开发者所使用并在代码中将他们的需求衡量进来。Guava被用于数以百计的生产环境应用,截止2012年7月,在guava-tests包里有惊人的28600个独立单元测试。归根结底其实使用像Guava这样的库远远好于自己写。此外,据Larry Wall(Perl的作者)所言,软件工程师最好的品质之一就是"懒惰",不是不想工作的意思,而是在可以良好运行的情况下不去重新改造车轮。真正优秀的程序员在开始自己写程序时会寻找已有的库来解决遇到的问题。
本书是关于什么的?
本书的目标是当你coding时总是会将它放在"手"边。当遇到需要使用Guava中的内容解决的状况或者Guava可能拥有解决你遇到的问题的方法时,我们期望本书能够给你答案。如果美誉哦,最少能够指引你到对的方向上。本书涵盖的所有话题都有源码。多数时候,源码是单元测试的形式。有时提出的一些有意义的例子可能是不同的形式,单元测试可以快速地展示代码工作的原理。并且随着Guava发布计划趋于频繁,单元测试是无价的,如果内容与之前的版本相比有变化,运行这些测试给你快速的指示。然而覆盖所有Guava库所有的部分几乎不可能,我们尽可能使本书全面并且覆盖典型的程序员认为有用的内容。最后我们希望本书易于阅读、提供乐趣、实用性强。
Guava安装
开始使用Guava之前,需要安装Java 1.6或更高的版本。本书使用的Guava是版本14,是撰写时最新的版本。下面是开始Guava的执行步骤:
- Guava在https://code.google.com/p/guava-libraries/ 上可以下载到guava-14.jar。
- 如果使用GWT(Google Web Toolkit,Java编写AJAX前端)并且希望在代码中应用Guava,可以下载GWT兼容版本guava-gwt-14.jar。因为标准版本不会通过GWT编译器编译成JavaScript。
- JAR文件下载之后,作为第三方库添加进IDE(IntelliJ, NetBeans, Eclipse)。如果使用的是文本编辑器(Sublime Text2或者TextMate),添加JAR文件路径进classpath。
- API文档位于http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/index.html。
现在准备工作就做好了,可以开始使用Guava了。
通过Maven或者Gradle管理Guava
可以使用Maven或者Gradle这样的构建工具来使用Guava。
在Maven项目中使用Guava,在pom.xml中添加如下的依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0</version>
</dependency>
如果使用的是Gradle,首先添加Maven中心仓库(如果还没有添加的话),即在build.gradle文件中添加如下内容:
repositories {
mavenCentral()
}
然后,在build.gradle文件添加以下的依赖节点:
dependencies {
compile group: 'com.google.guava' name: 'guava' version: '14.0'
}
获取更多关于Maven的信息,参考http://maven.apache.org/,Gradle信息请参考http://www.gradle.org/。
十分有必要提到,Guava仅有一个依赖,JSR-305。
【JSR-305是Java语言中定义用于检测缺陷的注解的规范。更多内容参考http://jcp.org/en/jsr/detail?id=305。】
如果你不打算直接使用JSR-305JAR,可以不用在依赖中包含。如果打算使用JSR-305,必须显示地声明这一依赖,因为它不会自动地被拉进来。如果你打算在Scala中使用,必须包含JSR-305JAR文件。Java编译器在编译时不需要这个库包含注解,但是Scala编译器需要。将来这一现象可能会变化,截至目前,如果打算在Scala中使用Guava,必须在classpath中包含JSR-305JAR文件。
获取书中源码
书中源码以Java工程进行组织,符合Gradle或者Maven的结构。之前提到过,大部分源码是单元测试的形式。如果没有安装Gradle或者Maven,强烈建议安装其中一个,运行单元测试会变得轻松,拉取Guava和工程所需的一切依赖。
以下是获取和使用源码的步骤:
- 下载源码http://www.packtpub.com/support;
- 解压缩;
- 进入guava-book-code文件夹下;
- 如果安装了Gradle,运行gradle install;
- 如果安装了Maven,运行mvn install。
上述步骤会安装源码所需的Guava和依赖。如果一切顺利,你会看到一大波单元测试被执行并通过。强烈建议使用之前提到的构建工具。这样在修改Guava版本和运行书中测试的时候会很轻松,看看是否有变化。如果没有安装构建工具,你需要下载一下的依赖才能运行书中列出的例子。
- Lucence v4.2: http://lucene.apache.org/
- Spring Java Version 3.2: http://www.springsource.org/springframework
- H2(embedded database) v1.3.170: http://www.h2database.com/html/main.html
- JUnit v4.11: https://github.com/junit-team/junit/wiki/Downloadand-Install
书中源码在MacBook Pro v10.7.5,Java 7,Gradle构建系统,IntelliJ IDE环境下完成。
总结
到目前为止,我们重温了一下Guava简短的历史和它如何提高代码质量、简化工作。我们认识到使用一个测试充分的库而不是自己从头开发的重要性。最后,我们提到从哪获得Guava,如何安装,如何下载源码。下一章,我们开始探索Guavacom.google.common.base包中的工具类和com.google.common.collect包的ComparisonChain类。
Google Guava入门(一)的更多相关文章
- Google Guava入门教程
以下资料整理自网络 一.Google Guava入门介绍 引言 Guava 工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [cachi ...
- Google Guava新手教程
以下资料整理自网络 一.Google Guava入门介绍 引言 Guavaproject包括了若干被Google的 Java项目广泛依赖 的核心库,比如:集合 [collections] . ...
- Guava入门使用教程
Guava入门使用教程 Guava Maven dependency In our examples, we use the following Maven dependency. <depen ...
- java开发人员,最应该学习和熟练使用的工具类。google guava.(谷歌 瓜娃)
学习参考文章: http://blog.csdn.net/wisgood/article/details/13297535 http://ifeve.com/google-guava/ http:// ...
- [转]Google Guava官方教程(中文版)
Google Guava官方教程(中文版) http://ifeve.com/google-guava/
- Google Guava官方教程(中文版)
Google Guava官方教程(中文版) 原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...
- Google Guava vs Apache Commons for Argument Validation
It is an established good practice to validate method arguments at the beginning of the method body. ...
- 使用 Google Guava 美化你的 Java 代码
文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMP ...
- Google Guava之--cache
一.简介 Google Guava包含了Google的Java项目许多依赖的库,如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support ...
随机推荐
- C++中struct和class定义类区别
有一种常见的误解认为用struct保留字定义的类与用class定义的类有很大的区别.唯一的不同只是默认的成员保护级别和默认的派生保护级别,没有其他的区别. 1. 用class定义的类,默认的成员访问级 ...
- python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
简介 流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便.在这里我们还是以博客园为例,带着小伙伴们实践一下. 接口封 ...
- remap——ROS中修改订阅的节点名称
跑数据集或者使用不同传感器时,难免会遇到需要修改topic名称的时候,此时可以有两种做法. 一.直接修改源码.如果有launch文件,则修改launch文件对应的topic 二.直接进行remap操作 ...
- Educational Codeforces Round 52E(构造,快速幂)
#include <bits/stdc++.h>using namespace std;const int mod=998244353;long long b[200007];long l ...
- 对于多线程程序,单核cpu与多核cpu是怎么工作的
此文中的大部分资料来自于网络上,我只是觉得把有道理的整理一下,方便以后查阅. 1.多线程在单核和多核CPU上的执行效率问题的讨论a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执 ...
- 洛谷P1342 请柬
P1342 请柬 题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学 ...
- CF622F The Sum of the k-th Powers(拉格朗日插值)
题意 给出 \(n,k\) , \(n\le10^9,k\le10^6\) ,求 \(\sum_{i=1}^n i^k(mod\;10^9+7)\) 题解 自然数幂次和,是一个\(k+1\)次多项式, ...
- 在JAVA中自定义连接数据库的工具类
为什么要自定义数据库连接的工具类: 在开发中,我们在对数据库进行操作时,必须要先获取数据库的连接,在上一篇随笔中提到的获取数据库连接的步骤为: 1.定义好4个参数并赋值 2.加载驱动类 3.获取数据库 ...
- Java基础笔记(十)—— 数组
数组是具有相同类型的数据的集合,是一种引用数据类型,一般具有固定的长度,并且在内存中占据连续的空间. 数组声明:数据类型[ ] 数组名; 数据类型 数组名[ ]; 如:int[ ...
- n个点的基环树数量
某裴姓蒟蒻上午提了一个小问题(rt)..然后他升华了..升华之前感受到了神犇的力量... 方法一: g[n][k]表示n个点,k条边的无向图(不一定连通) f[n][k]表示表示n个点,k条边的无向连 ...