【发布时间】:2020-01-09 20:48:58
【问题描述】:
我正在从 API 获取对象列表
public Optional<List<Employee>> getEmployeeData (String deptId){
List<Employee> employee = departmentClient.employeeData(deptId);
//Based on some condition I am filtering employee list but before that I want to check for null for list.
return Optional.ofNullable(employee).orElse(Collections.emptyList())
.stream()
.filter(Objects::nonNull)
.filter(e -> e.getType != null)
.collect(Collectors.toList());
}
但我认为方法返回类型是Optional<>,这会出错。如何在 Stream 之前检查 List 的 null 并以 Optional<List<..>> 的形式返回
【问题讨论】:
-
在这种情况下,如果员工列表为空,则会抛出
NullPointerException错误 -
与问题无关,但出于好奇:为什么该方法设计为返回
Optional<List<Employee>>而不是List<Employee>,如果没有employees匹配所需的条件,它可能为空?Optional便于在以下情况下包装可能的null值 - 例如,找不到匹配项,但空集合可以更好地传达这一点并且代码更少。 -
Optional.ofNullable(employee)甚至不应该是必需的,因为employee是Collection并且您在使用stream共享示例时不需要进一步的空检查。 -
除非您有非常特殊的要求没有提出来,否则我建议
departmentClient.employeeData()永远不要返回null,如果没有要返回的员工数据则返回一个空列表。而且您的方法getEmployeeData()不会返回Optional,而只会返回List<Employee>,如果没有要返回的数据,还会返回一个空列表。
标签: java java-8 java-stream optional