我正在尝试将以下代码迁移到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
答案 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()
}