首页 > 解决方案 > 如何在一个表达式中将可空字符串与多个值进行比较?

问题描述

nullnot string 的好解决方案是:

Stream.of("REG", "UNREG").anyMatch(str::equals)

取自这里:将一个字符串与一个表达式中的多个值进行比较

但是如何为可空字符串修改(或更改)它(如果 String 是nullreturn false)?

标签: javastringjava-8java-stream

解决方案


您可能想要开始Optional并在方法内执行 Stream Optional::map。如果没有结果(str was null),则按false要求返回:

Optional.ofNullable(str)
        .map(string -> Stream.of("REG", "UNREG")         // Your Stream as at your snippet
                             .anyMatch(string::equals))  // Returns if the str matches any
        .orElse(false);                                  // Returns false if str is null

不要小看一个简单的:

str != null && Stream.of("REG", "UNREG").anyMatch(str::equals);

如果第一个表达式是false(when stris null),则表达式的第二部分将不会被计算,因此在 NPE 内部永远不会失败Stream::anyMatch


推荐阅读