返回Optional.empty而不是Optional.map中的Optional[null]

Pun*_*cky -1 java option-type

在下面的代码中,如果customerInfo不存在,则返回Optional[null],从而customerInfo.get(name).textValue()返回NPE。有没有办法代替map(data -> data.get("customerInfo"))return ?这里的 null是一个 NullNode 对象。Optional.empty()Optional[null]Optional[null]

  Optional<JsonNode> orderData = getOrderData() // API Call

  orderData.map(data -> data.get("customerInfo"))
  .map(customerInfo -> customerInfo.get(name).textValue());
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 5

您似乎误解了您遇到的问题。NullPointerException 发生的原因customerInfo.get(name)是它为 null,因此customerInfo.get(name).textValue()尝试textValue()在 null 引用上调用该方法。

要解决此问题,您可以将该调用拆分map两个调用,如下所示:

orderData.map(data -> data.get("customerInfo"))
  .map(customerInfo -> customerInfo.get(name))
  .map(customer -> customer.textValue());
Run Code Online (Sandbox Code Playgroud)

这样,如果customerInfo.get(name)为 null,则生成的Optional将为空,并且最后一个 lambda 将不会被执行。