Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一个表达式中将可空字符串与多个值进行比较?_Java_String_Java 8_Java Stream - Fatal编程技术网

Java 如何在一个表达式中将可空字符串与多个值进行比较?

Java 如何在一个表达式中将可空字符串与多个值进行比较?,java,string,java-8,java-stream,Java,String,Java 8,Java Stream,非null字符串的好解决方案是: Stream.of("REG", "UNREG").anyMatch(str::equals) 从这里取: 但是如何修改(或更改)可为null的字符串(如果字符串为null返回false)?您可能希望改为从Optional开始,并在方法内执行流。如果不存在结果(str为null),则根据请求返回false: Optional.ofNullable(str) .map(string -> Stream.of("REG", "UNREG")

null
字符串的好解决方案是:

Stream.of("REG", "UNREG").anyMatch(str::equals)
从这里取:


但是如何修改(或更改)可为null的字符串(如果字符串为
null
返回
false
)?

您可能希望改为从
Optional
开始,并在方法内执行流。如果不存在结果(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
)时,表达式的第二部分将不会被计算,因此在
Stream::anyMatch

的NPE中永远不会失败。您可能希望改为从
Optional
开始,并在方法内执行流。如果不存在结果(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
)时,表达式的第二部分将不会被计算,因此在
Stream::anyMatch

的NPE中永远不会失败,最简单的解决方案是使用+:

请注意:

  • 在这个和基于
    流的解决方案中,都有一个单独的数组分配
  • 然而,这种方法仅适用于常规的
    等于
    (因此,此处不可能使用例如进行比较)

  • 最简单的解决方案是使用+:

    请注意:

  • 在这个和基于
    流的解决方案中,都有一个单独的数组分配
  • 然而,这种方法仅适用于常规的
    等于
    (因此,此处不可能使用例如进行比较)

  • 为什么不将
    equals
    子句倒置:

    boolean contained = Stream.of("REG", "UNREG").anyMatch(s -> s.equals(str));
    

    因此,如果
    str
    null
    它将不匹配流中的任何
    字符串
    s,因此返回
    false

    为什么不反转
    equals
    子句:

    boolean contained = Stream.of("REG", "UNREG").anyMatch(s -> s.equals(str));
    


    因此,如果
    str
    null
    它将不匹配流中的任何
    字符串,因此返回
    false

    你的意思是什么?str有什么问题吗null&&Stream.of(“REG”…
    ?或
    .anyMatch(s->s.equals(str))
    如果您确定流中的字符串不是null到zapl-thanx!@DodgyCodeException,它已经存在于Java 9中,并且这些不可变集合不支持
    null
    ,甚至不支持
    包含(null)
    ,这是与其他集合的基本区别之一。你是什么意思?str!=null&&Stream.of(“REG”…
    ?或
    。anyMatch(s->s.equals(str))有什么问题
    如果您确定流中的字符串不是nullto zapl-thanx!@DodgyCodeException,则它已经在Java 9中,并且这些不可变集合不支持
    null
    ,甚至不支持
    包含(null)
    ,这是与其他集合的基本区别之一。您对
    过滤器的调用没有效果,也没有必要。@DodgyCodeException:您是对的,只有当值存在时才会应用
    可选::map
    。我已经更正了它,谢谢。您对
    过滤器的调用没有效果,也没有必要。@DodgyCodeException:You's right,
    Optional::map
    仅在值存在时应用。我已经更正了它,谢谢。这不同于要求“如果字符串为
    null
    返回
    false
    ”,因为
    包含(null)如果存在
    null
    元素,则
    可以返回
    true
    。如果允许返回
    true
    的要求
    str
    null
    Stream
    具有
    null
    元素,
    Stream.of(…)。anyMatch(Predicate.isEqual​(str))
    将是另一种选择。好吧,你从字面上理解了这个要求。我相信OP并不意味着,因为这种行为(
    null
    这里和
    null
    那里返回
    false
    )将非常不直观。是的,我从字面上理解它(就像尼古拉斯的回答)如我所说,如果要匹配
    null
    元素,也可以使用
    .anyMatch(Predicate.isEqual​(str))
    如果您已经有一个现有的流,并且无法重写代码来生成一个集合ala
    array.asList
    。那么我们对字符串的来源做了不同的假设。我假设OP寻找一个习惯用法来测试编译时已知的几个
    字符串的相等性,比如
    if(“REG.equals(str)| |“unrel.equals(str))
    ->
    if(Arrays.asList(“REG”、“unrel”).contains(str))
    。实际上,现在我已经看过了,这似乎是他想要的。但是如果他从其他来源获得
    字符串
    ,基于
    的解决方案确实会更好。这与要求“如果字符串为
    null
    返回
    false
    ”不同,因为
    包含(null)如果存在
    null
    元素,则
    可以返回
    true
    。如果允许返回
    true
    的要求
    str
    null
    Stream
    具有
    null
    元素,
    Stream.of(…)。anyMatch(Predicate.isEqual​(str))
    将是另一种选择。好吧,你从字面上理解了这个要求。我相信OP并不意味着,因为这种行为(
    null
    这里和
    null
    那里返回
    false
    )将非常不直观。是的,我从字面上理解它(就像尼古拉斯的回答)如我所说,如果要匹配
    null
    元素,也可以使用
    .anyMatch(Predicate.isEqual​(str))
    如果您已经有一个现有流,并且无法重写代码来生成集合ala