lamda表达式的stream判空及优雅处理

Posted 一片秋叶一树春

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lamda表达式的stream判空及优雅处理相关的知识,希望对你有一定的参考价值。

问题:
1.在对使用lamda表达式的stream对list进行处理时,如果list是null将会有让人难受的NPE
2.在每个list.stream()前都if(list!=null)又不够优雅
3.在对list中对象进行操作时也得if()避免NPE,代码显得臃肿

优雅解决:
1.在操作前对list本身进行判空处理

使用Optional进行判空处理,如下:
Optional.ofNullable(allList).orElse(new ArrayList<>()).stream()
在list为null时,返回一个空list对象,否则执行stream后的操作
* orElse:如果值为空,返回一个对象
* orElseGet:如果值为空,执行一段lambda并返回一个对象
    如:orElseGet(()->new ArrayList<>());

2.在对list中对象操作时判空处理

//去除list列表中的空对象
list1.stream().filter(Objects::nonNull).map();

3.在对两个list进行addall()操作时,判空处理

Optional.ofNullable(list1).orElse(new ArrayList<>()).addAll(list2);
list的判空addall
但是上面代码在list2是null的时候还是会报NPE,所以list2也得加上判断
Optional.ofNullable(list1).orElse(new ArrayList<>()).addAll(Optional.ofNullable(list2).orElse(new ArrayList<>()));
如果有多个list需要addall,通常第一个list new出来,如下:
List<String> list1=new ArrayList<>();
list1.addll(Optional.ofNullable(list2).orElse(new ArrayList<>()));
list1.addll(Optional.ofNullable(list3).orElse(new ArrayList<>()));

以上是关于lamda表达式的stream判空及优雅处理的主要内容,如果未能解决你的问题,请参考以下文章

java8-Stream流API

原来 Lamda 表达式是这样写的

java8-详解Lamda表达式

Java lamda和predicate用法例子

Java lamda和predicate用法例子

Java 8 stream 实战