代码之家  ›  专栏  ›  技术社区  ›  coder25

比较字符串为null或空时返回布尔值

  •  3
  • coder25  · 技术社区  · 7 年前

    我正在尝试将下面的代码迁移到Java8

     private boolean test(String id1, String id2) {
    
            if(id2== null || id2.isEmpty()) return true;
            return id1.equals(id2);
        }
    

    已尝试解决方案

    Optional.ofNullable(id2).map(String::isEmpty).orElse(id2.equals(id1));
    

    上述解决方案在以下情况下不起作用

    id2 is null 
    id2 is equal to id1
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   Ousmane D.    7 年前

    可选的并不意味着取代简单的 if

    如果我是你,我会坚持你目前的解决方案,因为它是 选项,但是如果您想对高尔夫进行一点编码,那么您可以按照@Holger在注释中显示的方式进行操作:

    return id2 == null || id2.isEmpty() || id2.equals(id1);
    
        2
  •  2
  •   Eran    7 年前

    这个 Function 传递给 map Optional 不为空(即 id2 != null ).

    private static boolean test(String id1, String id2) {
        return Optional.ofNullable(id2)
                       .map(id -> id.isEmpty() || id.equals(id1)) // return true if id2 
                                                                  // is empty or equal 
                                                                  // to id1
                       .orElse(true); // return true when id2 == null
    }
    

    请注意,与原始代码相比,行为略有变化。在原始代码中,您将获得 NullPointerException 如果 id1 == null (除非你改变 id1.equals(id2) id2.equals(id1) 可选 版本,你不会的。

        3
  •  0
  •   Eugene    7 年前

    private static boolean test(String left, String right) {
        return Optional.ofNullable(right)
                .map(String::isEmpty)
                .orElse(true)
                || left.equals(right);
    }