Optional 优雅的解决Null(java 8 提供了Optional类)

Guava用Optional表示可能为null的T类型引用。一个Optional实例可能包含非null的引用(我们称之为引用存在),也可能什么也不包括(称之为引用缺失)。

Optional常用方法:

    //创建指定引用的Optional实例,若引用为null则表示缺失
Optional<Shop> optional1 = Optional.fromNullable(null);
//创建指定引用的Optional实例,若引用为null则抛出NullPointerException
Optional<Shop> optional2 = Optional.of(new Shop(1,"name","addr","mobile",new Date())); //optional1.isPresent() 如果Optional包含非null的引用(引用存在),返回true
System.out.println(optional1.isPresent()); //false
System.out.println(optional2.isPresent()); //true //optional.or() //返回Optional所包含的引用,若引用缺失,返回指定的值
Shop shop=optional1.or(new Shop());
System.out.println(shop==null); //false

借助ComparisonChain 实现 Comparable 接口

如果我们不借助Guava,我们实现Comparable可能需要这样写:

    @Override
public int compareTo(Shop that) {
int result = shop_id.compareTo(that.getShop_id();
if (result != 0) {
return result;
}
result = shop_name.compareTo(that.getShop_name());
return result;
}

当我们借助Guava ComparisonChain 实现 Comparable 接口我们可以这样写:

    @Override
public int compareTo(Shop that) {
return ComparisonChain.start()
.compare(this.shop_id,that.getShop_id())
.compare(this.shop_name,that.getShop_name())
.result();
}

MoreObjects.toStringHelper() 帮助重写toString()方法

    Shop newShop=new Shop(1,"帝都店","朝阳门","1111111",new Date());
System.out.println(newShop);
//demo.xxx.model.Shop@5babb90b

当类没有重写toString()方法时会调用object的toString()方法,代码如下:

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

有时候为了方便调试我们可以使用 MoreObjects.toStringHelper() 帮助我们重写toString方法。

    @Override
public String toString() {
return MoreObjects
.toStringHelper(this)
.add("shop_id", shop_id)
.add("shop_name",shop_name)
.add("create_time",create_time)
.toString();
}
//Shop{shop_id=1, shop_name=帝都店, create_time=Tue Jan 17 12:58:38 CST 2017}

Google Guava--基础工具用法的更多相关文章

  1. 【java】【guava】Google Guava的splitter用法

    Google Guava的splitter,分割字符串的用法 package com.sxd.swapping.guava; import com.google.common.base.CharMat ...

  2. Google Guava的splitter用法

    google的guava库是个很不错的工具库,这次来学习其spliiter的用法,它是一个专门用来 分隔字符串的工具类,其中有四种用法,分别来小结 1 基本用法: String str = " ...

  3. google guava 基本工具

    近期在项目中用到了google中的cache了解到guava里面的一些工具类和对集合的操作,封装的都比较下,没有时间自己去写,先做个标记, 参考文章如下: http://macrochen.iteye ...

  4. Google的java工具类Guava

    前言 google开发java项目肯定也不想重复造轮子,所以肯定也有工具类,就是它了:Guava 我将举例几个实际的例子,发挥这个工具类好用的功能.更多的方法和功能,还有内部的实现可以直接参考http ...

  5. Guava 是个风火轮之基础工具 (1)

    转自:http://www.jamespan.me/blog/2015/02/08/guava-basic-utilities-1/ Guava 是个风火轮之基础工具 (1) 前言 Guava 是 J ...

  6. Google guava工具类的介绍和使用

    概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava.. 高效设计良好的API ...

  7. [Google Guava] 2.4-集合扩展工具类

    原文链接 译文链接 译者:沈义扬,校对:丁一 简介 有时候你需要实现自己的集合扩展.也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集 ...

  8. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  9. java开发人员,最应该学习和熟练使用的工具类。google guava.(谷歌 瓜娃)

    学习参考文章: http://blog.csdn.net/wisgood/article/details/13297535 http://ifeve.com/google-guava/ http:// ...

随机推荐

  1. 使用Revel(go)开发网站

    Revel很好的利用了Go语言的goroutine,把每一个request都分配到了goroutine里.不用再写一大堆的回调.如果你写过nodejs的话就会深刻的体会到callback hell是什 ...

  2. #include 和 #import 的区别, @class 的含义

    #import 和 #include  会包含这个类的所有信息,包括实体变量和方法 而#include比起 #import的好处不会引起重复包含 @class是用来做类引用的 @class就是告诉编译 ...

  3. 5款替代微软Visio的开源免费软件(转)

    5款替代微软Visio的开源免费软件 提到流程图和图表设计,自然会想到微软出品的Office Visio,它是一款强大的流程图设计工具.Visio并不在Office标准套装中,需要额外付费购买,这可能 ...

  4. POJ1511来回最短路

    POJ1511 问你从1到其它点得所有最短路之和  与  其他点到1得所有最短路之和 得总和 思路很明确就是两次最短路,翻转一次地图就好了 一开始就是两次spfa之间处理好数据得更新管理就好 vect ...

  5. poj2462

    看八戒在做这个题,我也做了做.. 坑很多,还是要注意细节.不得不吐槽,难道又到了计算几何只能套模板否则就一串WA的情况了么! 要不是八戒做出来了,这题我估计我也就扔到这里了..哥不服啊~所以得做出来! ...

  6. Android ListView setOnItemClickListener/setOnItemSelectedListener,无效

    在Android 开发中,有时候我们在设置,LIstview,GridView,这些View的时候,再给他们设置:setOnItemClickListener/setOnItemSelectedLis ...

  7. lr中错误解决方法19种

    一.Error -27727: Step download timeout (120 seconds)has expired when downloading resource(s). Set the ...

  8. js获取select下拉框的value值和text文本值

    介绍一种取下拉框值以及绑定下拉框数据的方法    这里用到的jquery-ui-multiselect插件 1.前台html代码 <span class="ModuleFormFiel ...

  9. 微信退款证书使用c#

    微信退款需要证书 data为已封装好的xml数据 具体怎么封装>打开 public string get(string data) { string cert = @"D:\certi ...

  10. 730. Count Different Palindromic Subsequences

    Given a string S, find the number of different non-empty palindromic subsequences in S, and return t ...