如何避免流中的空值

问题描述 投票:0回答:3

我们是在列表中有损坏的数据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)的测试的方法?

java java-stream optional
3个回答
1
投票

如果确定变量“名称”是空安全的,请颠倒条件。例如,代替

e.getName().equals(name)

使用

name.equals(e.getName())

1
投票

反转条件:name.equals(e.getName())

.filter(e -> name.equals(e.getName()))

0
投票

您可以像这样使用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();
© www.soinside.com 2019 - 2024. All rights reserved.