此 Java 空检查的最佳方法是什么?我应该使用可选的吗?

What would be the best approach for this Java null check? Should I use an Optional?

我想实现以下目标:

LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("someString", object.getObjectField().getValue());

如果 object.getObjectField() 为空,则我得到 NullPointerException。我可以通过以下空检查轻松避免它:

if(object.getObjectField() != null) {
    linkedHashMap.put("someString", object.getObjectField().getValue());
    } else {
    linkedHashMap.put("someString", "N/A");
}

然而,我想找到一个更好更漂亮的实现,使用 Java 8 可选,但在这种情况下我仍然收到 NullPointerException:

linkedHashMap.put("someString", Optional.ofNullable(object.getObjectField().getValue()).orElse("N/A");

在这种情况下,正确的方法是什么?

but in this case I still receive a NullPointerException

那是因为即使 getObjectField() 为空,您仍然会调用 getValue()

您可以使用 Optional.map 来应用函数(如果存在):

Optional.ofNullable(object.getObjectField()).map(ObjectType::getValue)

如果你想使用默认值,你可以在后面加上orElse:

Optional.ofNullable(object.getObjectField()).map(ObjectType::getValue)
    .ofElse("N/A")