如何避免流中出现空值
How to avoid null values in a stream
我们的情况是列表中有一个损坏的数据 X,并且这个损坏的数据 X 的存在阻止了对与 X 相同类型的 Y 数据的操作。。这是不正常的,我们必须屏蔽代码,以便损坏数据 X 的存在不会阻止其他有效数据的使用。
我使用 Optional 和一个操作过滤器,如果名称为 null 我们跳过过滤器。
Personne personne = null;
String name= personne.getName();
try {
Optional<Personne> abstractPersonne=
APIPersonne.getAllPersonne(currentPersonne.getMethod())
.stream()
.filter(e -> e.getName() != null && e.getName().equals(name))
.findAny();
if (abstractPersonne.isPresent())
personne= abstractPersonne.get();
}
有没有办法避免 (e-> e.getName != null) 的测试?
如果您确定变量 "name" 是 null 安全的,只需反转条件。例如,而不是
e.getName().equals(name)
使用
name.equals(e.getName())
反转条件:name.equals(e.getName())
.filter(e -> name.equals(e.getName()))
您可以像这样 Optional.ofNullable(T)
检查
- 检查值不为空
- 检查你的字符串(列表值和你想要的字符串是否相等)
Optional<Personne> abstractPersonne = APIPersonne
.getAllPersonne(currentPersonne.getMethod())
.stream()
.filter(e -> Optional.ofNullable(e).isPresent() && e.getName().equals(name))
.findAny();
if (abstractPersonne.isPresent())
personne= abstractPersonne.get();
我们的情况是列表中有一个损坏的数据 X,并且这个损坏的数据 X 的存在阻止了对与 X 相同类型的 Y 数据的操作。。这是不正常的,我们必须屏蔽代码,以便损坏数据 X 的存在不会阻止其他有效数据的使用。
我使用 Optional 和一个操作过滤器,如果名称为 null 我们跳过过滤器。
Personne personne = null;
String name= personne.getName();
try {
Optional<Personne> abstractPersonne=
APIPersonne.getAllPersonne(currentPersonne.getMethod())
.stream()
.filter(e -> e.getName() != null && e.getName().equals(name))
.findAny();
if (abstractPersonne.isPresent())
personne= abstractPersonne.get();
}
有没有办法避免 (e-> e.getName != null) 的测试?
如果您确定变量 "name" 是 null 安全的,只需反转条件。例如,而不是
e.getName().equals(name)
使用
name.equals(e.getName())
反转条件:name.equals(e.getName())
.filter(e -> name.equals(e.getName()))
您可以像这样 Optional.ofNullable(T)
检查- 检查值不为空
- 检查你的字符串(列表值和你想要的字符串是否相等)
Optional<Personne> abstractPersonne = APIPersonne
.getAllPersonne(currentPersonne.getMethod())
.stream()
.filter(e -> Optional.ofNullable(e).isPresent() && e.getName().equals(name))
.findAny();
if (abstractPersonne.isPresent())
personne= abstractPersonne.get();