Optional的使用以及常見空指標解決辦法

2021-10-02 00:08:40 字數 2769 閱讀 7098

1.物件為空

user user=null;

user.getname();               //nullpointexception

解決辦法

user user=null;

optional.ofnullable(user).orelseget(user::new).getname();

2.為為空的值設定預設值

string aaa = null;

aaa.tostring();  //nullpointexception

optional.ofnullable(aaa).orelse("");

3.引用裝箱的值參與計算報空指標

我們從資料庫查出來的資料使用integer型別接收的,返回如果沒有的話就是null

integer a = null;

int b = 12 + a;

optional.ofnullable(a).orelse(0);

4.stream 裡面的map對映不允許為空

listuserlist=new arraylist<>();

userlist.stream().collect(collectors.tomap(user::getname,user::getage));

如果getusername或者getage有乙個為空都會報空指標。

解決辦法

mapcollect = userlist.stream().collect(hashmap::new,(k, v) ->k.put(v.getname(),v.getage()),hashmap::putall);

5.equals的使用注意

string  hello=null;

「aaa」.equals(hello)

上面這麼寫肯定沒問題

寫成下面的情況就會可能出現空指標

hello.equals("aaa")

一般會把已經變數寫在前面。防止控制真的發生。

6.一些業務上的判斷

這些只是對一些基本的判斷,還有一些就是業務上的

1一般從資料庫查出來的資料都會進行非空的校驗,一般主表都會進行校驗為空直接返回給出其他提示。

當然有一些資料設計上面可能不會使資料為空,你如果對自己的設計很清楚的話可以不加這些判斷,防止冗餘。

比如主表的有乙個附表,這個附表只要主要有資料就一定會建立,那麼我們判斷的時候只需要判斷主表就好了,附表不許再次冗餘的判斷,因為在我們執行新增操作的時候一定是做了校驗的。

7.optional用法的補充

![在這裡插入描述](

optional提供了很多方法供我們使用。

filter方法

![在這裡插入描filtger述](

filter方法使用函式式介面predicate接受乙個boolean型別的引數

首先獲得乙個optional例項

optional> userlistoption = optional.of(userlist);

如果直接使用stream流的filter方法需要對stream流前的集合進行非空判斷,使用optional包裝以後可以省去判斷

listnozhangsanlist = userlistoption

.filter(e -> !e.contains(new user("張三", 12))).orelseget(arraylist::new);

得到乙個集合裡面不含張三的集合

也可以用於對物件的操作

optionaluseroption = optional.of(user);

user user1 = useroption.filter(e -> e.getname() == null).orelseget(user::new);

map方法

user  user=new user("王五",null);

integer age = optional.of(user).map(e -> e.getage()).orelse(1);

system.out.println(age);

system.out.println(user.getage());

結果如下:

null

ifpresent()

user user2 = new user("zhaosi", 1);

optionals = optional.of(user2).map(e -> e.getname());

s.ifpresent(e-> );

結果如下

值存在下面的**

user user2 = new user("zhaosi", 1);

optionals = optional.of(user2).filter(e->e.getage()==1).map(e -> e.getname());

s.ifpresent(e-> );

結果沒有列印,說明,只有當返回的optional物件的值不為空的時候才會呼叫這個方法

flatmap 方法是將幾個集合合併成乙個集合

lftp的使用以及常見的指令

lftp的意思是用lftp登入到ftp伺服器上 lftp ip p port u user,password e commands bye ftp裡面常用的指令 1 登入ftp 2 lftp中文亂碼問題 對於像我這樣的新手,登入後看到的都是中文亂碼 因為一般本地都是utf 8的編碼 怎麼半呢,用 s...

碼雲的使用以及常見的問題

1.開啟終端 輸入命令 cd ssh 2.然後輸入ssh keygen t rsa c winner qq.com winner qq.com 為自己的郵箱喲 3.cat pub 產生公鑰匙 如果顯示秘鑰已經存在可以,把id rsa 檔案刪掉 rm id rsa 再重新執行上面的命令 將其公鑰新增到...

CMFCColorButton的使用以及重繪

cmfccolorbutton是visual studio 2008 sp1版本以上提供的顏色採集器。系統環境 windows 7 程式設計環境 visual studio 2008 sp1 下面介紹下使用步驟 1.新建基於對話方塊的工程,名稱為mycolorbuttondemo 2.拖動乙個按鈕到...