繁体   English   中英

如何避免 stream 中的 null 值

[英]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) 的测试?

只需反转条件,如果您确定变量“名称”是 null 安全的。 例如,而不是

e.getName().equals(name)

利用

name.equals(e.getName())

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

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

您可以像这样检查Optional.ofNullable( T )

  • 检查值不是 null
  • 检查您的字符串(列表值和您想要的字符串是否相等)
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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM