前言
optional类是jdk8引入的一个新类。在这之前,java在变量、对象、集合的判空处理上并不优雅。本篇博客以实际业务场景为例梳理optional类在实际业务场景中如何优雅地判空,并不会连篇累牍地介绍optional类的所有api及用法。
如果你想全面地学习并了解optional类的用法,以及类里的所有api,麻烦移步其他博客。
场景一、
当需要对变量判空,如果为空则设置默认值;
当需要对对象或集合判空,如果为空则新建;
// 比如有一个string类型的变量str,需要对其判空,如果为空则设置为空字符串 // 这个场景十分普遍。就是当从数据库请求到数据后,需要封装后返回给前端,这时对字段就需要做判空处理。 string str = optional.ofnullable(str).orelse(strings.empty); // 比如有一个arraylist类型的变量strlist,需要对其判空,如果为空则new一个arraylist list<string> newlist = optional.ofnullable(strlist).orelse(new arraylist<>()); // 这时如果需求变了,如果为空则new一个有默认值的arraylist,则可以写成如下: list<string> newlist2 = optional.ofnullable(strlist).orelseget(()->{ list<string> strlist2 = new arraylist<>(); strlist2.add("1"); strlist2.add("2"); strlist2.add("3"); return strlist2; }); // 这时我们发现这样的写法可读性太差,不优雅,则可以把lambda表达式中的这段代码抽离成独立的方法,写成如下: list<string> newlist3 = optional.ofnullable(strlist).orelseget(() -> getdefaultlist()); public static list<string> getdefaultlist() { list<string> strlist2 = new arraylist<>(); strlist2.add("1"); strlist2.add("2"); strlist2.add("3"); return strlist2; } // 这时,如果发现其实new出来的这个新的arraylist后续不需要做增删操作,只用于读操作,那么又可以简化成如下: list<string> newlist4 = optional.ofnullable(strlist).orelse(arrays.aslist("1", "2", "3"));
场景二、
对变量判空后,如果变量有值,需要做其他的业务处理;
// 比如有一个string类型的变量str,需要对其判空,如果非空则将该变量放入一个arraylist中,则可以写成如下: list<string> strlist = new arraylist<>(); optional.ofnullable(str).ifpresent(e-> strlist.add(e)); // 这里,上面的代码其实也可以用lambda表达式中的“方法引用”方式简写成如下: optional.ofnullable(str).ifpresent(strlist::add);
场景三、
对对象判空后,如果对象有值,需要提取该对象中的属性值;
// 如下场景就是对user对象判空,如果user不为空,则取出user对象的username字段值 user user = new user(); string username = optional.ofnullable(user).map(e -> user.getusername()).orelse(strings.empty); // 同理,上面的代码也可以用lambda表达式中的“方法引用”方式简写 string username = optional.ofnullable(user).map(user::getusername).orelse(strings.empty);
到此这篇关于java实现optional优雅地判空的使用的文章就介绍到这了,更多相关java optional判空内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论