下面就是Java 8中Optional类的使用说明的详细攻略。
什么是Java 8中的Optional类
Java 8中的Optional类是一个容器类,它可以保存一个值不为null的对象,也可以为空。Optional类被设计用来解决空指针异常问题,它可以帮助我们有效地处理null值问题,同时也可以使代码更加清晰易懂。
Optional类的常见用法
创建Optional对象
创建Optional对象时,需要传入要保存的对象。如果要创建一个空的Optional对象,可以调用它的静态方法empty()
。
Optional<String> optional1 = Optional.of("Hello World");
Optional<String> optional2 = Optional.empty(); // 创建一个空的Optional对象
注意:使用of()
方法创建Optional对象时,如果传入的参数为null,会抛出NullPointerException
异常。
判断Optional对象是否保存了值
可以通过调用Optional类的isPresent()
方法来判断Optional对象是否保存了值。如果Optional对象保存了一个非null的对象,则返回true,否则返回false。
Optional<String> optional = Optional.of("Hello World");
if (optional.isPresent()) {
System.out.println("值存在:" + optional.get());
} else {
System.out.println("值不存在");
}
获取Optional对象保存的值
可以通过调用Optional类的get()
方法来获取Optional对象保存的值。如果Optional对象保存了一个非null的对象,则返回这个对象;否则抛出NoSuchElementException
异常。
Optional<String> optional = Optional.of("Hello World");
System.out.println("获取到的值是:" + optional.get());
如果Optional对象保存的值为null怎么办?
可以通过调用Optional类的orElse()
方法来解决这个问题。orElse()
方法接收一个参数,如果Optional对象保存的值为null,则返回这个参数;否则返回Optional对象保存的值。
Optional<String> optional = Optional.empty();
String result = optional.orElse("值为空");
System.out.println(result);
如果Optional对象保存的值为null,我们不希望调用orElse()方法怎么办?
可以使用orElseThrow()
方法来抛出一个自定义异常,用于提醒调用方。
Optional<String> optional = Optional.empty();
String result = optional.orElseThrow(() -> new RuntimeException("值为空"));
System.out.println(result);
判断Optional对象保存的值是否符合条件
Java 8的Optional类提供了一个filter()
方法,可以用来判断Optional对象保存的值是否符合条件。如果符合条件,则返回一个包含原有的Optional对象保存的值的新的Optional对象;否则返回一个空的Optional对象。
Optional<String> optional = Optional.of("Hello World");
Optional<String> result = optional.filter(s -> s.startsWith("Hello"));
System.out.println(result.get());
如果Optional对象保存的值符合条件,执行一些操作
可以使用ifPresent()
方法来判断Optional对象保存的值是否符合条件并执行一些操作。
Optional<String> optional = Optional.of("Hello World");
optional.ifPresent(s -> System.out.println("值为:" + s));
示例
下面我们将使用几个示例说明如何使用Java 8的Optional类。
示例一
如果一个对象为null,我们通常需要使用if语句来检查它,避免发生空指针异常。
String text = null;
if (text != null) {
System.out.println(text.toUpperCase());
}
使用Optional类,可以使用一种更简洁的方式完成相同的任务。
Optional<String> optional = Optional.ofNullable(text);
optional.ifPresent(t -> System.out.println(t.toUpperCase()));
示例二
现在假设我们有一个Person类,它包含一个可选的地址列表。我们想检查某个人是否居住在某个城市,如果是,我们要输出该人的姓名。
class Person {
private String name;
private Optional<List<String>> address;
public Person(String name, Optional<List<String>> address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public Optional<List<String>> getAddress() {
return address;
}
}
List<Person> persons = Arrays.asList(
new Person("Tom", Optional.of(Arrays.asList("London", "Paris"))),
new Person("Jerry", Optional.empty()));
String city = "London";
persons.stream().forEach(p -> {
p.getAddress().ifPresent(a -> {
if (a.contains(city)) {
System.out.println(p.getName());
}
});
});
这个示例中,我们使用了Java 8的Lambda表达式来查找居住在某个城市的人。在流式处理器中,我们使用了Optional对象的ifPresent()
方法来检查是否有地址列表,并使用List对象的contains()
方法来检查地址是否包含特定的城市。
总结
Optional类是Java 8中一个非常实用的类,它可以解决NullPointException问题,是一种更加高效和优雅的处理null值得方式。本文通过详细讲解了Optional类的常见用法,并给出了几个示例来说明如何使用Optional类。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8中Optional类的使用说明 - Python技术站