Java如何使用流去除集合中某个字段为空的对象
作者:程序员大腾
这篇文章主要给大家介绍了关于Java如何使用流去除集合中某个字段为空的对象,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友可以参考下
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
。
到此这篇关于Java如何使用流去除集合中某个字段为空的对象的文章就介绍到这了,更多相关Java去除集合字段为空对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!