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的新特性(流)進(jìn)行篩選。把條件為空的數(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)文章
SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-10-10
java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案
這篇文章主要介紹了java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例,2021-02-02
Java實(shí)現(xiàn)解析JSON大文件JsonReader工具詳解
這篇文章主要介紹了Java實(shí)現(xiàn)解析JSON大文件的工具JsonReader使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Java 實(shí)現(xiàn)麥克風(fēng)自動錄音
這篇文章主要介紹了Java 實(shí)現(xiàn)麥克風(fēng)自動錄音的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12

