guava笔记
guava是在原先google-collection 的基础上发展过来的,是一个比较优秀的外部开源包,最近项目中使用的比较多,列举一些点。刚刚接触就被guava吸引了。。。
这个是guava的一个官网ppt里面的介绍:
|
1
2
3
4
5
|
其实你可能发现,一些基本的校验完全可以自己写,但是。。这些东西仅仅是看起来比较简单,实际上可能比我们想想的要复杂;用一个公共的lib,别人可能更加容易理解你的代码;当你用一个主流的开源包的时候,你可能在主流中;当你发现一个可以提升的点的 时候,如果仅仅是修改自己的私有包,可能没有多少人能够受益; |
1、非空检查,参数在赋值的时候就做一个检查
|
1
2
|
String inputName = "iamzhongyong";String name = Preconditions.checkNotNull(inputName); |
这个减少了代码行数,认为变量必须赋值才可以使用。
多条件校验
|
1
2
|
String inputName = "iamzhongyong";Preconditions.checkArgument(inputName!=null && !"".equals(inputName),"input is null"); |
能够有效的减少代码行数
此外Preconditions中还有多个校验方法,可以优雅的进行判断了。
2、优雅的使用null
空指针异常是我们再写代码的时候经常遇到的,guava提供了Optional来让你不得不思考null的问题
Optional.of(T):获得一个Optional对象,其内部包含了一个非null的T数据类型实例,若T=null,则立刻报错。
Optional.absent():获得一个Optional对象,其内部包含了空值,内部代码看,是返回了Absent的一个实例。
Optional.fromNullable(T):将一个T的实例转换为Optional对象,T的实例可以不为空,也可以为空[Optional.fromNullable(null),和Optional.absent()等价。
|
1
2
3
4
|
Optional<String> name = Optional.of("iamzhongyong"); if(name.isPresent()){ System.out.println(name.get()); } |
3、Object中常用的方法
例如我们常见的equals方法和hashCode方法,Objects中都有与之对应的方法提供;
同时,toString是我们比较常用的,Objects.toStringHelper方法十分方便
|
1
2
3
4
5
6
7
8
|
public class StringHelp { public String name; public int age; @Override public String toString() { return Objects.toStringHelper(this).add("name", this.name).add("age", this.age).toString(); }} |
4、字符转链接(Joiner 类)
|
1
2
3
4
5
6
7
8
|
public static void main(String[] args) { List<String> names = Lists.newArrayList(); names.add("iamzhongyong"); names.add("bixiao.zy"); StringBuilder sb = new StringBuilder(); String rs = Joiner.on("--").appendTo(sb, names).toString(); System.out.println(rs); } |
5、字符串分隔符
这个时候你可能说JDK自己有分割器,但是其实guava这个更加灵活,其实JDK的那个性能不咋滴
|
1
2
3
4
5
6
|
public static void main(String[] args) { String s = "dd sfsfs , dsfsf,ssfdfsdffsdfsf.sdfsfs,msfds"; for(String name : Splitter.on(",").trimResults().split(s)){ System.out.println(name); } } |
6、不可变的集合(Immutable)
这里就拿一个map为例子,初始化一个集合,然后向里面放置几个不变的集合
|
1
2
3
|
Map<Integer,String> mapa = new HashMap<Integer,String>(); mapa.put(122, "iamzhongyong"); mapa.put(1222, "bixiao.zy"); |
现在用Immutable就可以很简单的完成了
|
1
2
|
ImmutableMap<Integer, String> map = ImmutableMap.of(122,"iamzhongyong",1222,"bixiao.zy"); System.out.println(map.toString()); |
7、一个key对应多个Valve的情况
我们经常遇到这种,一个key有多个value的情况,一般的做法如下:Map<Key,List<Value>>的数据结构去搞,
但是现在又办法了,可以使用Multimap来解决这个问题,简洁明了
|
1
2
3
4
5
|
Multimap<Integer, String> keyValues = ArrayListMultimap.create(); keyValues.put(1, "a"); keyValues.put(1, "b"); keyValues.put(2, "c"); System.out.println(keyValues.toString()); |
8、本地缓存
guava的缓存设计的比较巧妙,这里就简单介绍一下,guava的缓存创建分为两种,一种是CacheLoader的方式,一种是callback的方式
参数的话就不多介绍了,直接在CacheBuilder中可以看到,类似这个
|
1
2
3
4
5
|
CacheBuilder.newBuilder() .maximumSize(10) .initialCapacity(3) .expireAfterWrite(10, TimeUnit.SECONDS) .build(); |
下面这个例子是callback的形式
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public void getNameFromLocalCache() throws Exception{ //new一个cache的对象出来 Cache<String/*name*/,String/*nick*/> cache = CacheBuilder.newBuilder().maximumSize(10).build(); //在get的时候,如果缓存里面没有,则通过实现一个callback的方法去获取 String name = cache.get("bixiao", new Callable<String>() { public String call() throws Exception { return "bixiao.zy"+"-"+"iamzhongyong"; } }); System.out.println(name); System.out.println(cache.toString()); } |
下面这个例子是LoadingCache的
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public void getNameLoadingCache(String name) throws Exception{ LoadingCache<String, String> cache = CacheBuilder.newBuilder() //设置大小,条目数 .maximumSize(20) //设置失效时间,创建时间 .expireAfterWrite(20, TimeUnit.SECONDS) //设置时效时间,最后一次被访问 .expireAfterAccess(20, TimeUnit.HOURS) //移除缓存的监听器 .removalListener(new RemovalListener<String, String>() { public void onRemoval(RemovalNotification<String, String> notification) { System.out.println("有缓存数据被移除了"); }}) //缓存构建的回调 .build(new CacheLoader<String, String>(){//加载缓存 @Override public String load(String key) throws Exception { return key + "-" + "iamzhongyong"; } }); System.out.println(cache.get(name)); cache.invalidateAll(); } |
9、集合 并集、交集、补集的方法
|
1
2
3
4
5
6
7
8
9
10
11
|
HashSet setA = Sets.newHashSet(1, 2, 3, 4, 5); HashSet setB = Sets.newHashSet(4, 5, 6, 7, 8); SetView union = Sets.union(setA, setB); System.out.println(union); SetView difference = Sets.difference(setA, setB); System.out.println(difference); SetView intersection = Sets.intersection(setA, setB); System.out.println(intersection); |
这些仅仅是一个开始
guava笔记的更多相关文章
- Guava学习笔记目录
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁
guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- Guava学习笔记(一)概览
Guava是谷歌开源的一套Java开发类库,以简洁的编程风格著称,提供了很多实用的工具类, 在之前的工作中应用过Collections API和Guava提供的Cache,不过对Guava没有一个系统 ...
- 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学习笔记(2):Preconditions优雅的检验参数
转自:http://www.cnblogs.com/peida/p/Guava_Preconditions.html 在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按 ...
- Guava学习笔记(1):Optional优雅的使用null
转自:http://www.cnblogs.com/peida/archive/2013/06/14/Guava_Optional.html 参考:[Google Guava] 1.1-使用和避免nu ...
- Guava学习笔记:Google Guava 类库简介
http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...
随机推荐
- BZOJ3622(容斥+dp)
思路 "恰k个"考虑求至少k.k+1--个容斥 题面说所有数字都不同,可以将所求转化为糖比药多的组数恰为\((n+k)/2\)的方案数 \(f[i][j]\)数组我觉得更好的理解方 ...
- applicationContext中普通数据源不用jndi数据源
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- NET Core中使用Dapper操作Oracle存储过程
.NET Core中使用Dapper操作Oracle存储过程最佳实践 为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...
- Cube配置http通过SSRS连接
IIS的配置:http://www.cnblogs.com/ycdx2001/p/4254994.html 连接字符串: Data Source=http://IP74/olap/msmdpump.d ...
- PHP+Mysql+jQuery找回密码
通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密 ...
- 从一个LocalDateTime引发的疑问
一 公司有同事部署出错,然后查日志,找时间,从k8s得到的时间是 2017-06-16T09:38:48.580 +0000,然后他就纳闷了,因为他根本不会在9点部署好吧,而且9点大多数程序员都没开 ...
- 大都市 meg
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景. 昔日,乡下有依次编号为1.. ...
- NHibernate中创建User类报错问题
前两天刚开始学习NHibernate架构,照着前辈的例子打了一遍运行之后没问题,然后自己创建了一个User的Model发现一运行就报User附近有错误,然后就检查,类写的没错用了virtual,Use ...
- Mind must be master of the body, strong mind can separate the body from its suffering.
Mind must be master of the body, strong mind can separate the body from its suffering.意志是身体的主人,有顽强的意 ...
- CSS3学习-用CSS制作立体导航栏
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...