文章目录
0 写在前面
最近写了一些业务逻辑,调试的时候总会报空指针异常。
Java中空指针异常是危险恐怖分子,最好不要碰见他。所以有些时候,处理集合中的数据时,特定情况下需要略过一些数据。
1 情景复刻
前端传输参数,通过SpringBoot,使用MyBatis查询数据库数据。
此处我用伪代码复刻一下。(不代表真正得业务代码)
如果传输条件或者数据库其他表中的字段有错误的话,查询条件为null的话。则查出来的为空,此时java中就会报空指针异常。
SELECT……FROM……WHERE 条件=null
2 解决方案
所以我们的解决办法:使用Java8的新特性(流)进行筛选。
把条件为空的数据给过滤掉,从那个集合中删除。
格式:
集合 集合名称 = 集合.stream().filter(对象 -> 对象.get某个属性() != null).collect(Collectors.toList());
这句话的意思为:使用流的方式,将其中对象的某个属性为空的整条数据从集合中删除,构建一个新的集合。
代码复刻一下。
对象类:
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) { //模拟数据--->其中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("--------------------------------------------------------"); //处理数据 List<Person> collect = personList.stream().filter(Person -> Person.getPersonUuid() != null).collect(Collectors.toList()); collect.forEach(person -> { System.out.println(person); }); }}
输出结果:
可以看到,在集合中两个uuid为null的对象都被过滤出去了。
3 写在最后
此功能只是在特定情况下适用。
如果想要保留为null的数据,可以吧中见的判断条件改为对象 -> 对象.get属性 == null
。
来源地址:https://blog.csdn.net/weixin_45909221/article/details/128709947