忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!

Hello ! 我是小小,今天是本周的第四篇,本篇将会着重的让小小介绍一下对30岁Java程序猿的忠告,强烈推荐哦~

前言

Java程序猿都干到30了,还不会Google Guava,你out啦,快来跟着本文愉快的学习一下Goog Guava,快乐编程,快乐你我~

以面向对象思想处理字符串

JDK提供的String不好吗?也许不好不爽,那就行,让30岁的程序猿们愉快的使用guava进行操作。看看如下代码:忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第1张图片其中Joiner是连接器,Splitter是分割器,通常我们会吧他们定义为static final,利用on生成对象后应用到String进行处理,这是可以复用的。要知道apache commons StringUtils提供都是static method,更加重要的是,guava提供的joiner/splitter是经过充分测试的,他的稳定性和效率要比apache高出不少,这个可以测试一下哦~ 发现没有我们想对String做什么操作,就是生成自己定制的Joiner/Splitter这是多么直接接的操作。对于Joiner,常用的方法跳过null元素,skipNulls()对于NULL元素使用其他替代,useForNull(String) 对于Splitter,常用的方法有,trimResults()/omitEmptyStrings()。注意拆分方式,有字符串哦!其实除了Joiner/Splitter以外,guava还提供了字符串匹配器。CharMatcher忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第2张图片CharMatcher,将字符的匹配和处理解耦,并提供丰富的方法供你使用!

对基本类型进行支持

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第3张图片guava提供了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些基本数据类型的扩展支持,只有你想不到的,没有它没有的!

对JDK集合的有效补充

灰色地带 Multiset

JDK的集合,提供了有序且可以重复的List,无序且不可以重复的set,那这里其实对于集合涉及到了两个概念,一个order,一个dups,那么List Vs Set,and then some?忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第4张图片举个例子忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第5张图片Multiset自带一个有用的功能,可以跟踪每个对象的数量。

Immutable vs unmodifiable

来先看一个例子:忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第6张图片

你看到JDK提供的unmodifiable的缺陷了吗?

实际上,Collections.unmodifiableXxx所返回的集合和源集合是同一个对象,只不过可以对集合做出改变的API都被override,会抛出UnsupportedOperationException。

也即是说我们改变源集合,导致不可变视图(unmodifiable View)也会发生变化,oh my god!

如何解决问题呢?例子在这~忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第7张图片OK,unmodifiable看上去没有问题呢,但是guava依然觉得可以改进,于是提出了Immutable的概念,来看:

guava提供了很多Immutable集合,比如ImmutableList/ImmutableSet/ImmutableSortedSet/ImmutableMap/......

看一个ImmutableMap的例子:

可不可以一对多:Multimap

JDK提供的MAP是一对一的,可不可以一对多呢?这样来看。guava是如何解决的忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第8张图片

可不可以双向:BiMap

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第9张图片

可不可以多个KEY:Table

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第10张图片

函数式编程:Functions

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第11张图片

断言:Predicate

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第12张图片

如何处理null?

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第13张图片快速失败~

如何处理缓存~

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第14张图片首先,这是一个本地缓存,guava提供的cache是一个简洁、高效,易于维护的。为什么这么说呢?因为并没有一个单独的线程用于刷新 OR 清理cache,对于cache的操作,都是通过访问/读写带来的,也就是说在读写中完成缓存的刷新操作!

异步回调相当的简单

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第15张图片

更多

忠告 | 小小对Java30岁程序猿的忠告,强烈推荐!_第16张图片

关于作者

我是小小。双鱼座的程序猿哦~我们下期再见~bye~

END

「 往期文章 」

装逼 | 无形装逼,最为致命!互联网黑话指南!

面试 | #面试面试面试 做#Java 就是要这种不要脸的…

抛弃 | 重磅!心好痛,她竟然抛弃我!

扫描二维码

获取更多精彩

小明菜市场

来源:网络(侵删)

图片来源:网络(侵删)

点个在看你最好看

你可能感兴趣的:(java,编程语言,python,redis,javascript)