当前位置: 首页 > 知识库问答 >
问题:

Java 8可选:合并两个可能为空的对象

孟绪
2023-03-14

我必须确保两个值是否为非空值。当first和second具有非空值时,将first作为参数传递给second。如果其中一个为空值,则返回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;
}

我想知道如何用可选的流利的形式来做这件事。

共有1个答案

汪德明
2023-03-14

你可以试试这样的方法:

return Optional.ofNullable(function_to_get_value1()).map( v1 -> function_to_get_value2(v1)).isPresent();

map()如果存在值,则应用lambda,并返回新的optional.ofNullable()或返回空的optional。因此,如果任何一个值为null或非空值,那么最终您将得到一个空的optional

如果您查看了这些方法的源代码,它基本上等同于以下内容:

//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;
 类似资料:
  • 下面是我的代码,按预期工作。但我需要用Optional.ofNullable替换它 如何使用

  • 我必须在两个字符串变量中进行选择--第一个具有非值。如果它们都是-那么我想退出该方法。这可以在下面的一段代码中完成: 也可以用简短的形式完成: 我正在纠结如何用 注意:我只能使用Java 8语法(所以没有)

  • 我有一个Java类,它有20个属性及其相应的getter和setter。还有两个对象列表:和。 使用Java 8: 但是我必须在哪个地方指定属性呢?是否应该重写和方法?

  • 如何将(upsert和delete孤立行)合并到? : 这里有一把小提琴:https://rextester.com/quvc30763 我想先用下面的代码删除孤立行: 然后用这个Ussert: null

  • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

  • 我正在努力理解如何合并两个可观察对象并利用它们合并后的产品。我在mergeMap、switchMap、flatMap、大理石图等上看了无数视频,但我仍然不知道合并观测值是如何工作的。我觉得在使用RxJS的时候,我不会有效率,甚至不会正确。 我有一个要订阅的可观测值,我还想订阅代码中特定表单数组的valueChanges可观测值。但是,我需要确保只有在正确构建表单数组之后才能进行第二次订阅,否则将出