对于非null
字符串,好的解决方案是:
Stream.of("REG", "UNREG").anyMatch(str::equals)
从这里来:Compare one String with multiple values in one expression。
但是如何修改(或更改)可为空的字符串(如果字符串为null
返回false
)?
答案 0 :(得分:4)
您可能想改用Optional
开头,并在Optional::map
方法内执行Stream。如果没有结果(str为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
(当str
为null
时),表达式的第二部分将不被求值,因此永远不会在{{1}内的NPE上失败}。
答案 1 :(得分:2)
最简单的解决方案是使用Arrays.asList
+ List.contains
:
Arrays.asList("REG", "UNREG").contains(str)
请注意:
Stream
的解决方案中,都只有一个数组分配。equals
有意义(因此此处无法使用equalsIgnoreCase
进行比较)。答案 2 :(得分:0)
为什么不仅仅颠倒equals
子句:
boolean contained = Stream.of("REG", "UNREG").anyMatch(s -> s.equals(str));
因此,如果str
是null
,它将与流中的任何String
不匹配,因此返回false
。