Stream的filter對List裏面對象屬性值過濾出空指針異常解決

在項目中使用stream的filter對list裏的對象屬性值判斷時,如果對象屬性值有null會
報空指針異常。(如上文中的Stu對象的age屬性出現null值)。
解決方法:對此屬性先做非空判斷,注意:非空判斷放前面

import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @description:
 * @author: chenxingxing
 * @date: 2019/11/15 11:28
 */
public class nullExcDemo {
    public static void main(String[] args) {
        List<Stu> list = new ArrayList<>();
        list.add(new Stu(19, "sire", 'n'));
        list.add(new Stu(23, "abc", 'm'));
        list.add(new Stu(78, "ab", 'm'));
        list.add(new Stu(null, "g", 'n'));
        /**
         * 在項目中使用stream的filter對list裏的對象屬性值判斷時,如果對象屬性值有null會
         * 報空指針異常。(如上文中的Stu對象的age屬性出現null值)。
         * 解決方法:對此屬性先做非空判斷,注意:非空判斷放前面
         */
        // 會報null指針異常
        // List<Stu> filtered = list.stream().filter(s -> s.getAge()==19).collect(Collectors.<Stu>toList());
        // 加非空判斷在後面也會報null指針異常
        // List<Stu> filtered = list.stream().filter(s ->  s.getAge()==19 && s.getAge() != null).collect(Collectors.<Stu>toList());
        // 解決空指針異常
        List<Stu> filtered = list.stream().filter(s ->  s.getAge() != null && s.getAge()==19).collect(Collectors.<Stu>toList());
        System.out.println(filtered);
    }
}
@Data
class Stu{
    private Integer age;
    private String name;
    private Character sex;

    public Stu(Integer age, String name, Character sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章