APP下载

Java 可选Optional

消息来源:baojiabao.com 作者: 发布时间:2024-05-16

报价宝综合消息Java 可选Optional

Java 8引入了一个java.util.Optional类来优雅地处理NullPointerException。

Optional是可以包含或不包含非空值的非空值的包装器。

可能返回null的方法应返回Optional,而不是null。

如果其包含非空值,则来自可选的isPresent()返回true,否则返回false。

如果get()方法包含非空值,则返回非空值,否则丢掷NoSuchElementException。

当一个方法返回一个可选,你必须检查它是否包含一个非空值,然后再询问它的值。

如果在确保它包含非空值之前呼叫了get()方法,则会丢掷NoSuchElementException,而不是丢掷NullPointerException。

建立可选物件

Optional 类提供了三个静态工厂方法来建立Optional物件。

可选 empty()返回一个空的Optional。从此方法返回的可选不包含非空值。(T值)的可选返回一个包含指定值作为非空值的Optional。如果指定的值为null,它会丢掷NullPointerException。可选的T值(T值)如果值为非空,则返回包含指定值的Optional。如果指定的值为null,则返回一个空的Optional。以下程式码显示如何建立Optional物件:

import java.util.Optional;

public class Main {

public static void main(String[] args) {

Optional empty = Optional.empty();

System.out.println(empty);

Optional str = Optional.of("www.w3cschool.cn");

System.out.println(str);

String nullableString = "";

Optional str2 = Optional.of(nullableString);

System.out.println(str2);

}

}

上面的程式码生成以下结果。

例2

如果包含非空值,以下程式码将在可选中打印值:

import java.util.Optional;

public class Main {

public static void main(String[] args) {

Optional str = Optional.of("www.w3cschool.cn");

if (str.isPresent()) {

String value = str.get();

System.out.println("Optional contains " + value);

} else {

System.out.println("Optional is empty.");

}

}

}

上面的程式码生成以下结果。

可选ifPresent

if Present(Consumer super T> action)方法对Optional中包含的值执行操作。

如果Optional是空的,这个方法不做任何事情。

以下程式码打印出来自Optional的内容。

import java.util.Optional;

public class Main {

public static void main(String[] args) {

Optional str = Optional.of("www.w3cschool.cn");

str.ifPresent(value -> System.out.println("Optional contains " + value));

}

}

上面的程式码生成以下结果。

如果Optional是空的,程式码将不会打印任何东西。

可选值

以下是获取可选值的四个方法:

T get()返回Optional中包含的值。如果Optional是空的,它会丢掷一个NoSuchElementException异常。T orElse(T defaultValue)返回Optional中包含的值。如果Optional为空,它返回指定的defaultValue。T orElseGet(Supplier extends T> defaultSupplier)返回Optional中包含的值。如果Optional为空,则返回从指定的defaultSupplier返回的值。 T orElseThrow(Supplier extends X> exceptionSupplier) throws X extends Throwable返回Optional中包含的值。如果Optional为空,它将丢掷从指定的exceptionSupplier返回的异常。OptionalInt,OptionalLong和OptionalDouble处理可选的基本值。

OptionalInt类中的getAsInt()方法返回int值。getAsLong()方法从OptionalLong类返回long值。getAsDouble()方法从OptionalDouble类返回double值。基本可选类的getters当它们为空时也会丢掷NoSuchElementException。

以下程式码显示了如何使用OptionalInt类:

import java.util.OptionalInt;

public class Main {

public static void main(String[] args) {

OptionalInt number = OptionalInt.of(2);

if (number.isPresent()) {

int value = number.getAsInt();

System.out.println("Number is " + value);

} else {

System.out.println("Number is absent.");

}

}

}

上面的程式码生成以下结果。

流可选值

一些流操作返回可选。 例如,所有流类中的max()方法返回一个可选物件。 当对空流使用max()方法时,返回值是一个没有内容的可选物件。

通过使用可选类,我们可以优雅地处理这些方法的返回值。

以下程式码显示了如何使用返回的max()形式的Optional物件。

import java.util.OptionalInt;

import java.util.stream.IntStream;

public class Main {

public static void main(String[] args) {

OptionalInt maxOdd = IntStream.of(10, 20, 30).filter(n -> n % 2 == 1).max();

if (maxOdd.isPresent()) {

int value = maxOdd.getAsInt();

System.out.println("Maximum odd integer is " + value);

} else {

System.out.println("Stream is empty.");

}

}

}

2019-07-12 04:48:00

相关文章