Google Guava很优秀,大有取代Apache Commons之势。Guava是用来,用原汁原味的英文来说就是“Our goal is for you to write less code and for the code you do write to be simpler, cleaner, and more readable”,Guava中主要包括Basic Utilities,Collections,Caches,Functional Idioms,Concurrency,Strings,Primitives Support,Ranges,I/O等等。下面介绍一些它的简单使用例子:
1、预先判断Preconditions
可以用在方法的开始或者是构造函数的开始,对于不合法的校验可以快速报错。
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
public class PreconditionsDemo {
public static void main(String[] args) {
new Car(null);//Exception in thread "main" java.lang.NullPointerException
//Exception in thread "main" java.lang.IllegalArgumentException: speed (0.0) must be positive
new Car("Audi").drive(0);
}
}
class Car {
private String name;
public Car(String name) {
this.name = checkNotNull(name);//NPE Null Pointer Exception
}
public void drive(double speed) {
checkArgument(speed > 0.0, "speed (%s) must be positive", speed);
}
}
除了checkNotNull之外,Preconditions还提供了一些其他的方法,如chekArgument, checkState, checkElementIndex, checkPositionIndex等,更多可参考Preconditions API。
2、Object.toStringHelper()
这个方法主要是用于更加简单的实现Object.toString()方法。
import com.google.common.base.MoreObjects;
public class MoreObjectsDemo {
private String name;
private String userId;
private String petName;
private String sex;
@Override
public String toString() {
//prints:MoreObjectsDemo{name=testName, userId=NO1, petName=PIG}
return MoreObjects.toStringHelper(this).add("name", "testName").add("userId", "NO1").add("petName", "PIG").omitNullValues().toString();
//prints:MoreObjectsDemo{name=testName, userId=NO1, petName=PIG}
//return MoreObjects.toStringHelper(this).add("name", "testName").add("userId", "NO1").add("petName", "PIG").toString();
}
public static void main(String[] args) {
System.out.println(new MoreObjectsDemo());
}
}
3、Stopwatch(计时器)
我们经常需要判断某一段语句执行需要多少时间,过去常用的做法是记录运行前的时间,然后用运行完成的时间减去运行前的时间,并且转换成我们可读的秒或是毫秒时间(这个转换过程可并不简单),在guava中可以有一个更好的方法:
import com.google.common.base.Stopwatch;
public class StopWatchDemo {
public static void main(String[] args) {
final Stopwatch stopwatch = Stopwatch.createUnstarted().start();
//start
stopwatch.start();
try {
System.out.println("You can do something!");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
stopwatch.stop();
long nanos = stopwatch.elapsed(TimeUnit.NANOSECONDS);
System.out.println(nanos);//1000076976
}
}
附:TimeUUnit可选值有:
NANOSECONDS 毫微秒 十亿分之一秒(就是微秒/1000)
MICROSECONDS 微秒 一百万分之一秒(就是毫秒/1000)
MILLISECONDS 毫秒 千分之一秒
SECONDS 秒
MINUTES 分钟
HOURS 小时
DAYS 天
4、CharMatcher
字符匹配的方法特别多,举一个例子过滤用户的输出。
import com.google.common.base.CharMatcher;
public class CharMatcherDemo {
private static final CharMatcher ID_MATCHER = CharMatcher.DIGIT.or(CharMatcher.is('-'));
public static void main(String[] args) {
String userID = "123454-333";
String s = ID_MATCHER.retainFrom(userID);
System.out.println(s);//123454-333
s = ID_MATCHER.retainFrom("1 test 11-222");
System.out.println(s);//可以把输入的的字符类型去掉,111-222
}
}
5、String Joining 字符串连接
可以快速地把一组字符数组连接成为用特殊符合连接的一个字符串,如果这组字符中有null值的话,我们可以使用skipNulls或是useForNull来控制我们要输出的内容。
//Joiner JOINER= Joiner.on(",").skipNulls();
Joiner JOINER= Joiner.on(",").useForNull("null");
String str = JOINER.join("hello","world",null,"qiyadeng");
//hello,world,null,qiyadeng
6、String Splitting字符串分割
有这样一组字符串”hello, ,qiyadeng,com,”我们用split(“,”)分割字符串,得到的结果是[“hello”,”“,”qiyaeng”,”com”],但是我们如果希望的是把空值去掉,还需要另外处理,使用guava的Splitter可以简单做到。使用指定的分隔符对字符串进行拆分,默认对空白符不做任何处理,并且不会静默的丢弃末尾分隔符,如果需要处理的话要显式调用trimResults(),omitEmptyStrings()。
public class SplitterDemo {
public static void main(String[] args) {
Iterable split = Splitter.on(',').trimResults().omitEmptyStrings().split("foo, ,bar,quux,blue,");
for (String s : split) {
System.out.print(s + "---");//foo---bar---quux---blue---
}
System.out.println();
String[] split1 = "foo, ,bar,quux,blue,".split(",");
for (String s : split1) {
System.out.print(s + "---");//foo--- ---bar---quux---blue---
}
}
}
7、Guava的官方API参考文档:
http://google.github.io/guava/releases/snapshot/api/docs/
https://github.com/google/guava