最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何使用流去除集合中某個(gè)字段為空的對(duì)象

 更新時(shí)間:2023年08月15日 10:01:10   作者:程序員大騰  
這篇文章主要給大家介紹了關(guān)于Java如何使用流去除集合中某個(gè)字段為空的對(duì)象,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

0 寫在前面

最近寫了一些業(yè)務(wù)邏輯,調(diào)試的時(shí)候總會(huì)報(bào)空指針異常。Java中空指針異常是危險(xiǎn)恐怖分子,最好不要碰見他。所以有些時(shí)候,處理集合中的數(shù)據(jù)時(shí),特定情況下需要略過一些數(shù)據(jù)。

1 情景復(fù)刻

前端傳輸參數(shù),通過SpringBoot,使用MyBatis查詢數(shù)據(jù)庫數(shù)據(jù)。此處我用偽代碼復(fù)刻一下。(不代表真正得業(yè)務(wù)代碼)

如果傳輸條件或者數(shù)據(jù)庫其他表中的字段有錯(cuò)誤的話,查詢條件為null的話。則查出來的為空,此時(shí)java中就會(huì)報(bào)空指針異常。

    SELECT
    ……
    FROM
    ……
    WHERE 條件=null

2 解決方案

所以我們的解決辦法:使用Java8的新特性(流)進(jìn)行篩選。把條件為空的數(shù)據(jù)給過濾掉,從那個(gè)集合中刪除。格式:

    集合 集合名稱 =  集合.stream().filter(對(duì)象 -> 對(duì)象.get某個(gè)屬性() != null).collect(Collectors.toList());

這句話的意思為:使用流的方式,將其中對(duì)象的某個(gè)屬性為空的整條數(shù)據(jù)從集合中刪除,構(gòu)建一個(gè)新的集合。

代碼復(fù)刻一下。

對(duì)象類

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 + '\'' +
                '}';
    }
}

測(cè)試類

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);
        //此時(shí)person2中的uuid為null。所以某些特定時(shí)段會(huì)報(bào)錯(cuò)。
        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é)果:

可以看到,在集合中兩個(gè)uuid為null的對(duì)象都被過濾出去了。

3 寫在最后

此功能只是在特定情況下適用。如果想要保留為null的數(shù)據(jù),可以吧中見的判斷條件改為對(duì)象 -> 對(duì)象.get屬性 == null。

到此這篇關(guān)于Java如何使用流去除集合中某個(gè)字段為空的對(duì)象的文章就介紹到這了,更多相關(guān)Java去除集合字段為空對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼

    SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • Java泛型機(jī)制必要性及原理解析

    Java泛型機(jī)制必要性及原理解析

    這篇文章主要介紹了Java泛型機(jī)制必要性及原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例

    java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案

    這篇文章主要介紹了java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例,
    2021-02-02
  • Java實(shí)現(xiàn)解析JSON大文件JsonReader工具詳解

    Java實(shí)現(xiàn)解析JSON大文件JsonReader工具詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)解析JSON大文件的工具JsonReader使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • MyBatis分頁插件PageHelper的具體使用

    MyBatis分頁插件PageHelper的具體使用

    這篇文章主要介紹了MyBatis分頁插件PageHelper的具體使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • java 實(shí)現(xiàn)線程同步的方式有哪些

    java 實(shí)現(xiàn)線程同步的方式有哪些

    當(dāng)使用多個(gè)線程來訪問同一個(gè)數(shù)據(jù)時(shí),非常容易出現(xiàn)線程安全問題,所以我們用同步機(jī)制來解決這些問題,本文將詳細(xì)介紹,需要的朋友可以參考下
    2012-11-11
  • Java字符串的intern方法有何奧妙之處

    Java字符串的intern方法有何奧妙之處

    intern() 方法返回字符串對(duì)象的規(guī)范化表示形式。它遵循以下規(guī)則:對(duì)于任意兩個(gè)字符串 s 和 t,當(dāng)且僅當(dāng) s.equals(t) 為 true 時(shí),s.intern() == t.intern() 才為 true
    2021-10-10
  • 你知道Java中的注解可以繼承嗎?

    你知道Java中的注解可以繼承嗎?

    注解想必大家都用過,也叫元數(shù)據(jù),是一種代碼級(jí)別的注釋,可以對(duì)類或者方法等元素做標(biāo)記說明。那么今天我想問大家的是類被繼承了,注解能否繼承呢?可能會(huì)和大家想的不一樣,感興趣的可以往下看
    2022-12-12
  • Java 實(shí)現(xiàn)麥克風(fēng)自動(dòng)錄音

    Java 實(shí)現(xiàn)麥克風(fēng)自動(dòng)錄音

    這篇文章主要介紹了Java 實(shí)現(xiàn)麥克風(fēng)自動(dòng)錄音的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • MyBatis-Ext快速入門實(shí)戰(zhàn)

    MyBatis-Ext快速入門實(shí)戰(zhàn)

    MyBatis-Ext是MyBatis的增強(qiáng)擴(kuò)展,和我們平常用的Mybatis-plus非常類似,本文主要介紹了MyBatis-Ext快速入門實(shí)戰(zhàn),感興趣的可以了解一下
    2021-10-10

最新評(píng)論

开封县| 龙陵县| 武汉市| 邯郸市| 昔阳县| 寻乌县| 丰台区| 农安县| 嫩江县| 额济纳旗| 新沂市| 府谷县| 抚宁县| 胶南市| 长沙县| 木里| 铅山县| 丽水市| 宣武区| 高阳县| 长白| 攀枝花市| 诸城市| 利津县| 奇台县| 西峡县| 郎溪县| 扎囊县| 南雄市| 师宗县| 玛曲县| 久治县| 长治县| 油尖旺区| 玛纳斯县| 札达县| 凌源市| 绥化市| 宁乡县| 通州市| 元谋县|