在比较字符串为null或空时返回boolean

时间:2018-10-08 09:05:05

标签: java java-8 optional

我正在尝试将以下代码迁移到Java 8

 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 个答案:

答案 0 :(得分:3)

可选的选项不能代替简单的if检查。本质上,您是在“迁移”到一种可读性和效率较低的解决方案。

如果我是我,我会坚持使用当前的解决方案,因为它是 better 选项,但是,如果您想对高尔夫进行一点编码,则可以按照@Holger在注释中所示进行操作:

return id2 == null || id2.isEmpty() || id2.equals(id1);

答案 1 :(得分:2)

Function不为空(即map时),将评估传递给Optional的{​​{1}}。

因此应该是:

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)版本中,您不需要。

答案 2 :(得分:0)

相反呢:

private fun waitToDoSomethingRecursively() {
    handler.postDelayed(::doSomethingRecursively, 5000)
}

private fun doSomethingRecursively () {
    ...
    waitToDoSomethingRecursively()
}