
在Java 9版本中,引入了Optional.ifPresentOrElse()和Optional.or()方法来改进其功能。 Optional.ifPresentOrElse()方法检查值是否存在,如果存在则应用具有值的操作,否则返回空操作,而Optional.or()方法检查值是否存在,如果存在则返回包含值的选项,否则返回应用于Supplier函数的Optional。 Optional.ifPresentOrElse()方法包含两个参数,Consumer和Runnable,而Optional.or()方法只包含一个参数,Supplier。
Optional.ifPresentOrElse()的语法:
public void ifPresentOrElse(Consumer super T> action, Runnable emptyAction)
Example
的中文翻译为:示例
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
public class IfPresentOrElseMethodTest {
public static void main(String args[]) {
optionalIsPresent();
optionalIsEmpty();
}
private static void optionalIsPresent() {
Optional optional = Optional.of("Test");
AtomicInteger successCounter = new AtomicInteger();
AtomicInteger emptyOptionalsCounter = new AtomicInteger();
optional.ifPresentOrElse(x -> successCounter.incrementAndGet(), () -> emptyOptionalsCounter.incrementAndGet());
System.out.println(successCounter.get());
System.out.println(emptyOptionalsCounter.get());
}
private static void optionalIsEmpty() {
Optional optional = Optional.empty();
AtomicInteger successCounter = new AtomicInteger();
AtomicInteger emptyOptionalsCounter = new AtomicInteger();
optional.ifPresentOrElse(x -> successCounter.incrementAndGet(), () -> emptyOptionalsCounter.incrementAndGet());
System.out.println(successCounter.get());
System.out.println(emptyOptionalsCounter.get())
}
}输出
1 0 0 1
Optional.or()的语法:
public Optionalor(Supplier extends Optional extends T>> supplier)
Example
的中文翻译为:示例
import java.util.Optional;
public class OptionalOrMethodTest {
public static void main(String args[]) {
optionalIsPresent();
optionalIsEmpty();
}
private static void optionalIsPresent() {
Optional optional1 = Optional.of("Test1");
Optional optional2 = Optional.of("Test2");
Optional> optional3 = optional1.or(() -> optional2);
System.out.println(optional3.get());
}
private static void optionalIsEmpty() {
Optional optional1 = Optional.empty();
Optional optional2 = Optional.of("Test2");
Optional optional3 = optional1.or(() -> optional2);
System.out.println(optional3.get());
}
} 输出
Test1 Test2











