本文我们介绍了Java 9 Optional Api新增的三个方法。or方法在Optional为空时返回Optional对象。 ifPresentOrElse()在值存在时执行Consumer参数,反之执行另一个参数回调参数。感兴趣的朋友跟随小编一起看看吧 在Java 9中,Optional API得到了进一步的增强,新增了三个方法来帮助开发者更优雅地处理可能缺失的值。这些新方法旨在提供更加灵活和安全的编程方式,减少空指针异常的风险,同时提高代码的可读性和简洁性。下面我们将详细探讨这三个新增的方法。 1. or 方法 在Java 9之前,Optional类提供了orElse()和orElseGet()方法来处理Optional为空的情况。orElse()会返回一个默认值,而orElseGet()则会调用一个Supplier来获取默认值。然而,这两种方法都会将结果转换为非Optional类型。Java 9引入的or()方法解决了这个问题,它允许在Optional为空时返回一个新的Optional对象。这在需要保持Optional链式调用或者希望返回一个Optional值时非常有用。下面的代码展示了or()方法的使用: ```java @Test public void givenOptional_whenEmpty_thenShouldTakeAValueFromOr() { // given String defaultString = "default"; Optional<String> value = Optional.empty(); Optional<String> defaultValue = Optional.of(defaultString); // when Optional<String> result = value.or(() -> defaultValue); // then assertThat(result.get()).isEqualTo(defaultString); } ``` 2. ifPresentOrElse 方法 ifPresentOrElse()方法是针对那些需要在Optional值存在或不存在时分别执行不同操作的情况设计的。这个方法接受两个参数:一个Consumer用于在Optional有值时执行,另一个Runnable用于在Optional为空时执行。这种方法避免了在Optional值存在时编写额外的if条件判断,提高了代码的简洁性。下面的例子展示了ifPresentOrElse()如何工作: ```java @Test public void givenOptional_whenPresent_thenShouldExecuteProperCallback() { // given Optional<String> value = Optional.of("properValue"); AtomicInteger successCounter = new AtomicInteger(0); AtomicInteger onEmptyOptionalCounter = new AtomicInteger(0); // when value.ifPresentOrElse( v -> successCounter.incrementAndGet(), onEmptyOptionalCounter::incrementAndGet); // then assertThat(successCounter.get()).isEqualTo(1); assertThat(onEmptyOptionalCounter.get()).isEqualTo(0); } @Test public void givenOptional_whenNotPresent_thenShouldExecuteProperCallback() { // given Optional<String> value = Optional.empty(); // when value.ifPresentOrElse( v -> System.out.println("Value present"), () -> System.out.println("Optional is empty")); // then // Runnable gets executed as the Optional is empty } ``` 3. mapOr 方法(非官方) 虽然在Java 9的官方文档中并没有找到"mapOr"这个方法,可能是描述有误或者是指"map"和"or"的组合使用。通常,你可以通过先调用map()方法对Optional中的值进行转换,然后再调用or()方法来处理缺失值的情况。这样可以确保在Optional有值时执行转换,而在Optional为空时执行备用逻辑。 Java 9的Optional API新增的这些方法进一步提升了编程体验,让处理可能缺失的值变得更加简洁和安全。开发者可以根据具体需求选择合适的工具,提升代码的可维护性和表达力。
- 粉丝: 6
- 资源: 967
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助