Guava--基本工具

1、Optional–使用和避免null

 Guava用Optional表示可能为null的T类型引用。

eg:

Optional<Integer> possible = Optional.of(5);

1.1创建Optional

//1.创建指定引用的Optional实例,若引用为null则快速失败
Optional.of(T);

//2.创建引用缺失的Optional实例
Optional.absent();

//3.创建指定引用的Optional实例,若引用为null则表示缺失
Optional.fromNullable(T);

1.2使用Optional实例查询

//1.如果Optional包含非null的引用,返回true
boolean isPresent();

//2.返回Optional所包含的引用,若引用缺失,则抛出java.lang.IllegalStateException
T get();

//3.返回Optional所包含的引用,若引用缺失,返回指定的值
T or(T);

//4.返回Optional所包含的引用,若引用缺失,返回null
T orNull();

2、Preconditions–前置条件

 前置条件:让方法调用的前置条件判断更简单。Guava在Preconditions类中提供了若干前置条件判断的实用方法,不符合则抛出异常

//1.检查boolean是否为true,用来检查传递给方法的参数。
checkArgument(boolean);

//2.检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。
checkNotNull(T);

//3.用来检查对象的某些状态。
checkState(boolean);

//4.检查index作为索引值对某个列表、字符串或数组是否有效。index>=0 && index<size *
checkElementIndex(int index, int size);

//5.检查index作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size *
checkPositionIndex(int index, int size);

//6.检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效*
checkPositionIndexes(int start, int end, int size);

3、Objects–进阶的Object方法

//1.equal--不会抛NullPointerException异常
Objects.equal("a", "a");
Objects.equal(null, null);

//2.hashCode--会对传入的字段序列计算出合理的、顺序敏感的散列值(自动)
Objects.hashCode(Object...);

/*3.ComparisonChain--进阶的比较器
ComparisonChain执行一种懒比较:它执行比较操作直至发现非零的结果,在那之后的比较输入将被忽略。*/
public int compareTo(Foo that) {
    return ComparisonChain.start()
            .compare(this.aString, that.aString)
            .compare(this.anInt, that.anInt)
            .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
            .result();
}

4.Ordering–排序器

 排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。

4.1创建排序器

//1.对可排序类型做自然排序
natural()//2.按对象的字符串形式做字典排序
usingToString();

//3.把给定的Comparator转化为排序器
from(Comparator);

4.2其他排序器

 链式调用方法:通过链式调用,可以由给定的排序器衍生出其它排序器

//1.获取语义相反的排序器
reverse();

//2.使用当前排序器,但额外把null值排到最前面。	
nullsFirst();	

//3.使用当前排序器,但额外把null值排到最后面。
nullsLast();	

//4.合成另一个比较器,以处理当前排序器中的相等情况。
compound(Comparator);

//5.基于处理类型T的排序器,返回该类型的可迭代对象Iterable<T>的排序器。	
lexicographical();

//6.对集合中元素调用Function,再按返回值用当前排序器排序。	
onResultOf(Function);	

4.3使用排序器

//1.获取可迭代对象中最大的k个元素,并按从大到小排序,返回一个集合
greatestOf();

//2.获取最小的几个,并按从小到大排序
leastOf();

//3.返回集合的一个排好序的副本
sortedCopy(list);

//4.返回不可变的排序副本
immutableSortedCopy(list);

//5.判断是否已经按排序器有序,元素不能少于2,允许有相等元素
isOrdered();

//6.是否严格排序,不允许有相等元素 
isStrictlyOrdered();

//7.返回最大值
max();

//8.返回最小值
min();

5、Throwables–简化异常和错误的传播与检查

/*如果Throwable是Error或RuntimeException,直接抛出;
  否则把Throwable包装成RuntimeException抛出。
  返回类型是RuntimeException,所以你可以像上面说的那样写成throw Throwables.propagate(t),Java编译器会意识到这行代码保证抛出异常。
*/
RuntimeException propagate(Throwable)/*Throwable类型为X才抛出*/
void propagateIfInstanceOf( Throwable, Class<X extends Exception>) throws X;

/*Throwable类型为Error或RuntimeException才抛出*/
void propagateIfPossible( Throwable);

/*Throwable类型为X, Error或RuntimeException才抛出*/
void propagateIfPossible( Throwable, Class<X extends Throwable>) throws X;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值