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 ...
随机推荐
- git 仓库拆分方案对比
此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 git 拆分仓库在网上已有的案例上来看,分为 submodule 和 subtree. 还有基于这两个方 ...
- Spark Task 概述
Task的执行流程: 1. Driver端中的 CoarseGrainSchedulerBackend 给 CoarseGrainExecutorBacken 发送 LaunchTask 消息 2. ...
- 洛谷P1800 software_NOI导刊2010提高(06)
P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...
- Codeforces Round #467(Div2)题解
凌晨起来打CF,0:05,也是我第一次codeforces 第一题: 我刚开始怀疑自己读错题了,怎么会辣么水. 判除了0的数字种类 #include <cstdio> ; ]; int m ...
- P3823_[NOI2017]蚯蚓排队 哈希+脑子
之前就写过一遍,今天却写挂了,查了半天发现是数组名写错啦$qwq$ 观察到$K$很小,所以使得我们可以哈希(怎么什么都能哈希$qwq$).我们把长度小于等于$50$的子串扔到哈希表里,并统计出现次数, ...
- Luogu P2455 [SDOI2006]线性方程组 真•高斯消元板子
果然如Miracle学长所说...调了一天...qwq..还是过不了线下的Hack upd after 40min:刚刚过了 就是多了一个判无解的操作... 当系数都为0,且常数项不为0时,即为无解. ...
- 关于jetty的那些奇葩问题
Jetty的解压目录并不像Tomcat那样直接是在webapps下,如果你什么都不做修改的话,Ubuntu14.04下Jetty的默认解压目录是/var/cache/jetty/data/下: 比如我 ...
- Android中常用的几种加密
1.数字摘要 是指通过算法将长数据变为短数据,通常用来标识数据的唯一性,是否被修改,常用的加密算法有md5和sha1两种,如Android的App签名也是用的这两种算法. md5具有不可逆性,也可用来 ...
- ForkJoin有参无返回值、有参有返回值实例
介绍: a . Fork/Join为JKD1.7引入,适用于对大量数据进行拆分成多个小任务进行计算的框架,最后把所有小任务的结果汇总合并得到最终的结果 b . 相关类 public abstract ...
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题
首先要做的就是配置域名的MX 记录啦: 先添加一条A记录: mail.abc.com 指向 你的服务器IP! 然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为 ...