OptionalifPresent() 与OptionalorElse() 有何不同?

optional.ifpresent()和optional.orelse()是java的optional类中的两个方法,旨在优雅地处理可选值,但它们的用途不同,使用场景也不同。

1。可选.ifpresent()

如果可选值中存在值,则 ifpresent() 方法将执行给定的操作。当该值存在时,它通常用于产生副作用。

主要特征:

动作执行:
仅当optional包含值时才执行指定的消费者。

无返回值:
它不返回任何内容(void 方法)。

optional optional = optional.of("hello");

optional.ifpresent(value -> system.out.println("value is: " + value));
// output: value is: hello

optional emptyoptional = optional.empty();
emptyoptional.ifpresent(value -> system.out.println("value is: " + value));
// no output since the optional is empty.

用例:

如果值存在则执行操作(例如,记录、更新状态)。
在对值进行操作之前避免显式的 null 检查。

2。可选.orelse()

orelse() 方法返回optional 中包含的值,如果optional 为空,则返回默认值。

主要特征:

返回值:
始终返回一个值,可以是包含的值,也可以是默认值。
无副作用:
不执行任何操作,仅返回值。

optional optional = optional.of("hello");
string value = optional.orelse("default");
system.out.println(value); // output: hello

optional emptyoptional = optional.empty();
string emptyvalue = emptyoptional.orelse("default");
system.out.println(emptyvalue); // output: default

用例:

当optional为空时提供后备/默认值。
确保始终从optional返回非空值。

将两者结合在一个场景中

示例:
您有一个代表用户名的可选值。如果用户名存在,则记录它。如果没有,您将使用默认用户名。

Optional username = Optional.of("JohnDoe");

// Log the username if present
username.ifPresent(name -> System.out.println("User logged in: " + name));

// Get the username or default to "Guest"
String displayName = username.orElse("Guest");
System.out.println("Display name: " + displayName);

// Output:
// User logged in: JohnDoe
// Display name: JohnDoe

总结
当您想要对存在的值执行操作时,请使用 ifpresent()。

当您想要检索值时,请使用 orelse(),确保如果optional 为空,则返回默认值。