Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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
Java8可选:组合两个可能为空的对象_Java_Java 8_Optional - Fatal编程技术网

Java8可选:组合两个可能为空的对象

Java8可选:组合两个可能为空的对象,java,java-8,optional,Java,Java 8,Optional,我必须确保两个值是否为非null。当第一个和第二个具有非空值时,将第一个作为参数传递给第二个。如果其中一个为空值,则返回false。 这可以通过以下代码完成: String value1 = function_to_get_value1() if (value1 == null) return false; String value2 = function_to_get_value2(value1) if (value2 == null) return false; return true;

我必须确保两个值是否为非null。当第一个和第二个具有非空值时,将第一个作为参数传递给第二个。如果其中一个为空值,则返回false。 这可以通过以下代码完成:

String value1 = function_to_get_value1()
if (value1 == null) return false;
String value2 = function_to_get_value2(value1)
if (value2 == null) return false;
return true;
也可以用简短的形式完成:

try {
  return function_to_get_value2(function_to_get_value1()) != null;
} catch (NullPointerException e) {
  return false;
}

我想知道如何以流畅的形式使用可选选项来完成此操作。

您可以尝试以下操作:

return Optional.ofNullable(function_to_get_value1())
               .map(v1 -> function_to_get_value2(v1))
               .isPresent();
map()。因此,如果其中一个值为null或非空,那么最后将有一个空的
可选

如果您看一下这些方法的源代码,它基本上相当于:

//Optional.ofNullable(...)
Optional<UiObject> v1Opt = value1 == null ? Optional.empty() : Optional.of(value1);

//Optional.map(...)
Optional<UiObject> v2Opt;
if(v1Opt.isPresent()) {
   //this is the lambda
   UiObject value2 = function_to_get_value2(value1);

   //Optional.ofNullable(...) called in map(...)
   v2Opt = value2 == null ? Optional.empty() : Optional.of(value2);
} else {
   v2Opt = Optional.empty();
}

//Optional.isPresent()
return v2Opt.value != null;
//可选。不可用(…)
可选v1Opt=value1==null?Optional.empty():Optional.of(value1);
//可选。映射(…)
可选v2Opt;
if(v1Opt.isPresent()){
//这是lambda
UiObject value2=函数_to_get_value2(value1);
//可选。在映射(…)中调用的可调用(…)
v2Opt=value2==null?可选的.empty():可选的.of(value2);
}否则{
v2Opt=可选。空();
}
//可选。isPresent()
返回v2Opt.value!=无效的

注意:
函数到获取值2(函数到获取值1())
不匹配“当第一个和第二个具有非空值时,将第一个作为参数传递给第二个。”-始终传递值1。您也没有检查value2是否为null,即需要执行
返回函数\u to_get_value2(函数\u to_get_value1())!=改为空。这是否回答了您的问题?