Java如何使用流去除集合中某個字段為空的對象
0 寫在前面
最近寫了一些業(yè)務(wù)邏輯,調(diào)試的時候總會報空指針異常。Java中空指針異常是危險恐怖分子,最好不要碰見他。所以有些時候,處理集合中的數(shù)據(jù)時,特定情況下需要略過一些數(shù)據(jù)。
1 情景復(fù)刻
前端傳輸參數(shù),通過SpringBoot,使用MyBatis查詢數(shù)據(jù)庫數(shù)據(jù)。此處我用偽代碼復(fù)刻一下。(不代表真正得業(yè)務(wù)代碼)
如果傳輸條件或者數(shù)據(jù)庫其他表中的字段有錯誤的話,查詢條件為null的話。則查出來的為空,此時java中就會報空指針異常。
SELECT
……
FROM
……
WHERE 條件=null
2 解決方案
所以我們的解決辦法:使用Java8的新特性(流)進行篩選。把條件為空的數(shù)據(jù)給過濾掉,從那個集合中刪除。格式:
集合 集合名稱 = 集合.stream().filter(對象 -> 對象.get某個屬性() != null).collect(Collectors.toList());
這句話的意思為:使用流的方式,將其中對象的某個屬性為空的整條數(shù)據(jù)從集合中刪除,構(gòu)建一個新的集合。
代碼復(fù)刻一下。
對象類:
public class Person { private Integer id; private String name; private String sex; private String email; private Long phoneNumber; private String personUuid; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Long getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(Long phoneNumber) { this.phoneNumber = phoneNumber; } public String getPersonUuid() { return personUuid; } public void setPersonUuid(String personUuid) { this.personUuid = personUuid; } public Person() { } public Person(Integer id, String name, String sex, String email, Long phoneNumber, String personUuid) { this.id = id; this.name = name; this.sex = sex; this.email = email; this.phoneNumber = phoneNumber; this.personUuid = personUuid; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", email='" + email + '\'' + ", phoneNumber=" + phoneNumber + ", personUuid='" + personUuid + '\'' + '}'; } }
測試類:
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Test { public static void main(String[] args) { //模擬數(shù)據(jù)--->其中person2中的uuid為null Person person1 = new Person(1,"孫悟空","男","zhangsan@163.com",18253847430L,"8BADB4E1-76B0-57F8-1C77-F25A1D06045D"); Person person2 = new Person(2,"林黛玉","女","lindaiyu@126.com",18765381234L,null); Person person3= new Person(3,"魯智深","男","luzhishen@qq.com",18254810416L,"A0576C79-CF82-879B-146B-1C0D172EC1A6"); Person person4 = new Person(4,"貂蟬","女","diaochan@lvbu.com",12345678999L,"EC1EE903-FB4E-655D-B95B-2C41A0CAFD82"); Person person5 = new Person(5,"豬八戒","女","zhubajie@lvbu.com",98765432111L,null); List<Person> personList = new ArrayList<Person>(); personList.add(person1); personList.add(person2); personList.add(person3); personList.add(person4); personList.add(person5); //此時person2中的uuid為null。所以某些特定時段會報錯。 personList.forEach(person->{ System.out.println(person); }); //分割線 System.out.println("--------------------------------------------------------"); System.out.println("--------------------------------------------------------"); System.out.println("--------------------------------------------------------"); //處理數(shù)據(jù) List<Person> collect = personList.stream().filter(Person -> Person.getPersonUuid() != null).collect(Collectors.toList()); collect.forEach(person -> { System.out.println(person); }); } }
輸出結(jié)果:
可以看到,在集合中兩個uuid為null的對象都被過濾出去了。
3 寫在最后
此功能只是在特定情況下適用。如果想要保留為null的數(shù)據(jù),可以吧中見的判斷條件改為對象 -> 對象.get屬性 == null
。
到此這篇關(guān)于Java如何使用流去除集合中某個字段為空的對象的文章就介紹到這了,更多相關(guān)Java去除集合字段為空對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA項目的依賴(pom.xml文件)導(dǎo)入問題及解決
這篇文章主要介紹了IDEA項目的依賴(pom.xml文件)導(dǎo)入問題及解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Maven+Tomcat8 實現(xiàn)自動化部署的方法
本篇文章主要介紹了Maven+Tomcat8 實現(xiàn)自動化部署的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10利用spring-data-redis實現(xiàn)incr自增的操作
這篇文章主要介紹了利用spring-data-redis實現(xiàn)incr自增的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Java前后端分離的在線點餐系統(tǒng)實現(xiàn)詳解
這是一個基于SpringBoot+Vue框架開發(fā)的在線點餐系統(tǒng)。首先,這是一個前后端分離的項目。具有一個在線點餐系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧2022-01-01SpringBoot2.0集成WebSocket實現(xiàn)后臺向前端推送信息
這篇文章主要介紹了SpringBoot2.0集成WebSocket實現(xiàn)后臺向前端推送信息,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01