<转载> 你应该更新的Java知识之常用程序库(一)
原文出处:http://www.blogbus.com/dreamhead-logs/226738702.html
很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进。如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西。
Guava
一句话,只要你做Java项目,就应该用Guava。
guava是Google出品的一套Java核心库,在我看来,它甚至应该是JDK的一部分。作为一个Java程序员,如果你没抱怨过JDK的设计,只能说明一点,你写得程序还是太少。正是JDK设计不彰,才有了一些项目来补充JDK的不足。如果说老Java程序员应该听说过Apache Commons Lang,那新Java程序员该知道的就是Guava了。
老Java程序员更多的是知道Google Collections,不妨到它的主页上走一遭,你会看到这个库已经改名为Guava。事实上,Guava并不直接等于Google Collections,Guava是一个超集。Guava实在太强大了,要想展现它的强大,需要专门的介绍,这里就不展开了。
下面以一个统计单词出现个数的小程序作为这个段落的结尾,虽然无法与许多其它语言的实现相提并论,但作为一个Java程序员,你不妨想一下按照传统方式,这段代码应该是什么样子。
String content = Files.toString(new File(args[0]), Charset.defaultCharset());
Iterable texts = Splitter.on(CharMatcher.WHITESPACE)
.omitEmptyStrings()
.trimResults()
.split(content);
Multiset collection = HashMultiset.create(texts);
Joda Time
你觉得一个API设计得差到什么份上,才会把自己差不多的API全部Deprecated掉。java.util.Date便是这样的奇葩。因为它的API几乎都是反直觉的,几乎所有敢于用它的Java程序员都吃过它的亏。想初始化个2013年的第一天,还真不那么容易:
Date firstDayOf2013 = new Date(113, 0, 1);
如果你是个Java新手,你能猜出113是从哪来的吗?(好吧,它是2013-1900,至于为什么是1900,这真得问API的设计者了)。
Joda Time就是人们实在无法忍受这样东西的产物。同样的代码用Joda Time实现:
DateTime firstDayOf2013 = new DateTime().withDate(2013, 1, 1);
无论如何,你知道这能看出这些参数的含义了。不只如此,你还可以计算两天后是什么日子:
firstDate.plusDays(2);
日期格式化,也是JDK Date系列API里一大特色,你必须把代码写成下面这样:
new SimpleDateFormat("yyyy.MM.dd").format(firstDayOf2013)
作为一个初始化很慢的构造函数,你还必须每次调用,因为它不是线程安全的。同样的代码,在Joda Time里,我们可以用DateTimeFormatter:
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy.MM.dd");
...
formatter.print(dateTime);
请尽管放心大胆把formatter声明成一个字段,因为它是线程安全的。
当然,Joda Time的强大远不止于此。当然,JDK也并不是那么完全的自暴自弃,于是,有了一个JSR 310专门设计新的Date API。JSR 310的spec lead是Steven Colebourne,此人正是Joda Time的作者。不过,虽然JSR 310为我们描绘了Date的全新景象,但Java 8出来之前就先别打它的主意了,乖乖地用Joda Time吧。
<转载> 你应该更新的Java知识之常用程序库(一)的更多相关文章
- 你应该更新的 Java 知识之常用程序库【转载】
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进.如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东 ...
- 应该更新的Java知识之常用程序库
摘自:http://www.blogbus.com/dreamhead-logs/226738702.html 在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果你 ...
- 你应该更新的 Java 知识
作者:dreamhead 出处:<你应该更新的Java知识>系列 你应该更新的 Java 知识 Tag:你应该更新的Java知识 Java Guava 集合 版权声明:转载时请以超链接形式 ...
- 2016年6月20日 JAVA知识框架
基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1 JAVA简介 2 JAVA编程环境 3 JAVA基本编程结构 4 ...
- 随笔编号-16 JAVA知识框架
基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1 JAVA简介 2 JAVA编程环境 3 JAVA基本编程结构 4 ...
- Java知识体系
Java知识体系 java知识结构.jpg web框架.jpg 计算机课程体系.png 2016-08-19_090929.png 流行的哈希算法生存状况.jpg "JAVA之父" ...
- Android开发学习必备的java知识
Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...
- Java知识体系纲要
最近一段时间,把Java主要涉及到的大概念都大致学习了一遍,为了让自己能够更好地形成对Java知识体系的整体把握,先把学过的知识点添加到自己画的思维导图上. 整个Java知识体系的划分,我自己主要将它 ...
- 震惊!90%的程序员不知道的Java知识!
震惊!90%的程序员不知道的Java知识! 初学Java的时候都会接触的代码 public static void main(String[] args){ ... } 当时就像背公式一样把这行代码给 ...
随机推荐
- JDK8 API文档(下载)
DK API文档 java SE 8 API文档: http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downl ...
- iOS-多线程之NSThread详解
前言 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B.为了同时执行两个任务,产生了多线程. 我打开一个视频软件,我开辟一个线程A让它执行下载任务,我开辟一个线程B,用来播放视频.我开辟两个 ...
- win7 解决git clone 连接被拒绝—hosts文件过期
我出现问题的原因是自己修改过 C:\Windows\System32\drivers\etc\HOSTS, 把同事的这个文件拷贝过来后,一切恢复了正常 错误在eclipse中表现为: ...
- maven 错误No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------- ...
- Android多进程需要注意的一个地方
可能很多项目都会有一个自定义的Application,做一些初始化操作以及全局化的一些数据保存,这时如果程序中定义了远程服务(android:process=":remote"), ...
- PHP错误日志控制(display_errors和error_reporting)
display_errors和error_reporting是php程序调试过程中两个非常重要的参数,下面就来介绍一下这两个错误日志的配置如何开启和关闭: 我们知道在产品的生产环境肯定是不能够显示错误 ...
- 关于移动端的font和图片的问题
一.font-family 使用无衬线字体 body { font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif ...
- linux下批量修改存有超大数据量IP文件中的IP内容以及去重排序
作为一个linux的学徒,分享一下自己解决这个小问题的心得,在处理这个问题时使用了一个小技巧感觉很适用,个人发觉linux的终端真滴是非常强大,下面就详细地介绍这个问题以及解决办法吧 问题描述:由于要 ...
- mysql大小写问题
以前做企业项目的时候,用的都是oracle数据库,在新公司项目用的是mysql,有关mysql大小写的问题 1 windows下默认mysql是不区分大小写的,要想让其支持大小写.更改方法 在my ...
- Palindrome subsequence
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...